JS排序算法之希爾排序與快速排序?qū)崿F(xiàn)方法
本文實例講述了JS排序算法之希爾排序與快速排序?qū)崿F(xiàn)方法。分享給大家供大家參考,具體如下:
希爾排序:
定義一個間隔序列,例如是5,3,1。第一次處理,會處理所有間隔為5的,下一次會處理間隔為3的,最后一次處理間隔為1的元素。也就是相鄰元素執(zhí)行標(biāo)準插入排序。
在開始最后一次處理時,大部分元素都將在正確的位置,算法就不必對很多元素進行交換,這是比插入元素高級的地方。
時間復(fù)雜度O(n*logn)
function shellSort(){
var N=arr.length;
var h=1;
while(h<N/3){
h=3*h+1;//設(shè)置間隔
}
while(h>=1){
for(var i=h; i<N; i++){
for(j=i; j>=h && arr[j]<arr[j-h]; j-=h){
swap(arr, j, j-h);
}
}
h=(h-1)/3;
}
}
function swap(array, i, j){//兩個數(shù)調(diào)換
var temp =array[j];
array[j]=array[i];
array[i]=temp;
}
快速排序:
通過遞歸的方式將數(shù)據(jù)依次分解成包含較小元素和較大元素的不同子序列,不斷重復(fù)這個步驟,直到所有數(shù)據(jù)都是有序的。
選一個基準值,小于基準值的放一個數(shù)組里面。大于基準值的放一個數(shù)組里面。
時間復(fù)雜度O(n*logn)
function quickSort(arr){
if(arr.length==0){
return [];
}
var left=[];
var right=[];
var p=arr[0];
for(var i=1; i<arr.length; i++){
if(arr[i]<p){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return quickSort(left).concat(p,quickSort(right));
}
快速排序適合用于大型數(shù)據(jù)集合,在處理小數(shù)據(jù)集合反而性能會下降。
PS:這里再為大家推薦一款關(guān)于排序的演示工具供大家參考:
在線動畫演示插入/選擇/冒泡/歸并/希爾/快速排序算法過程工具:
http://tools.jb51.net/aideddesign/paixu_ys
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)學(xué)運算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯誤與調(diào)試技巧總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章
json對象與數(shù)組以及轉(zhuǎn)換成js對象的簡單實現(xiàn)方法
下面小編就為大家?guī)硪黄猨son對象與數(shù)組以及轉(zhuǎn)換成js對象的簡單實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06
深入了解JavaScript中邏輯賦值運算符的應(yīng)用
邏輯賦值是對現(xiàn)有數(shù)學(xué)和二進制邏輯運算符的擴展。我們先復(fù)習(xí)一下,然后看看把它們結(jié)合在一起能得到什么,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-11-11
JavaScript實現(xiàn)簡單的數(shù)字倒計時
這里給大家總結(jié)了一些比較常用的javascript實現(xiàn)的倒計時功能的代碼,非常的實用,有需要的小伙伴可以參考下。2015-05-05

