首頁  >  文章  >  web前端  >  JavaScript排序演算法之希爾排序的2個實例_基礎知識

JavaScript排序演算法之希爾排序的2個實例_基礎知識

WBOY
WBOY原創
2016-05-16 16:53:181653瀏覽

插入排序在對幾乎已經排好序的資料操作時, 效率高, 即可以達到線性排序的效率。
但插入排序一般來說是低效的, 因為插入排序每次只能將資料移動一位。
希爾排序按其設計者希爾(Donald Shell)的名字命名,該演算法由1959年公佈。一些舊版教科書和參考手冊把該演算法命名為Shell-Metzner,即包含Marlene Metzner Norton的名字,但是根據Metzner本人的說法,「我沒有為這種演算法做任何事,我的名字不應該出現在演算法的名字中。

JavaScript排序演算法之希爾排序的2個實例_基礎知識
希爾排序基本思想:先取一個小於n的整數d1作為第一個增量,把文件的全部記錄分成d1個組。所有距離為d1的倍數的記錄放在同一個組別中。先在各組內進行直接插入排序;然後,取第二個增量d2

此方法實質上是一種分組插入法。

實例1:


複製程式碼 程式碼如下:
/**
 * 希爾排序,也稱遞減增量排序演算法,是插入排序的一種更有效率的改進版本。希爾排序是非穩定排序演算法。
 *
 * 希爾排序是基於插入排序的以下兩點性質而提出改進方法的:
 *
 * 插入排序在對幾乎已經排好序的資料操作時, 效率高, 即可以達到線性排序的效率
 * 但插入排序一般來說是低效率的, 因為插入排序每次只能將資料移動一位
 *
 /** */

function shellSort( list ) {
    var gap = Math.floor( list.length / 2 );

   for( i = gap; i             temp = list[i];

   ; j -= gap ) {
                list[j] = list[j - gap];
    temp;
        }

        gap = Math. floor( gap / 2 );
    }

    return list;
};

// test
var arr = [🎜>
// test
var arr = [2, 15353, , 66, 23, 87, 15, 32];

shellSort(arr);


實例2:


複製程式碼 程式碼如下:




陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn