溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaScript中有哪些排序算法

發(fā)布時(shí)間:2021-08-12 14:53:06 來源:億速云 閱讀:90 作者:Leah 欄目:web開發(fā)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)JavaScript中有哪些排序算法,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

說明

·  每個(gè)瀏覽器測試得出的數(shù)據(jù)會不一樣。比如我用chrome 測試 一般快速排序都會最快,IE 則根據(jù)數(shù)組長度有可能希爾最快。

·  不要用太大數(shù)據(jù)去測試冒泡排序(瀏覽器崩潰了我不管)

個(gè)人理解

·  冒泡排序:最簡單,也最慢,貌似長度小于7***

·  插入排序: 比冒泡快,比快速排序和希爾排序慢,較小數(shù)據(jù)有優(yōu)勢

·  快速排序:這是一個(gè)非??斓呐判蚍绞?,V8的sort方法就使用快速排序和插入排序的結(jié)合

·  希爾排序:在非chrome下數(shù)組長度小于1000,希爾排序比快速更快

·  系統(tǒng)方法:在forfox下系統(tǒng)的這個(gè)方法非???br/>

  1.  // ---------- 一些排序算法  

  2.     // js 利用sort進(jìn)行排序  

  3.      systemSort:function(array){  

  4.         return array.sort(function(a, b){  

  5.             return a - b;  

  6.         });  

  7.     },  

  8.     // 冒泡排序  

  9.     bubbleSort:function(array){  

  10.         var i = 0, len = array.length,  

  11.             j, d;  

  12.         for(; i<len; i++){  

  13.             for(j=0; j<len; j++){  

  14.                 if(array[i] < array[j]){  

  15.                     d = array[j];  

  16.                     array[j] = array[i];  

  17.                     array[i] = d;  

  18.                 }  

  19.             }  

  20.         }  

  21.         return array;  

  22.     },  

  23.     // 快速排序  

  24.     quickSort:function(array){  

  25.         //var array = [8,4,6,2,7,9,3,5,74,5];  

  26.         //var array =
     [0,1,2,44,4,324,5,65,6,6,34,4,5,6,2,43,5,6,62,43,5,1,4,51,56,76,7,7,2,1,45,4,6,7];  

  27.         var i = 0;  

  28.         var j = array.length - 1;  

  29.         var Sort = function(i, j){  

  30.               

  31.             // 結(jié)束條件  

  32.             if(i == j ){ return };  

  33.               

  34.             var key = array[i];  

  35.             var tempi = i; // 記錄開始位置  

  36.             var tempj = j; // 記錄結(jié)束位置  

  37.               

  38.             while(j > i){  

  39.                 // j <<-------------- 向前查找  

  40.                 if(array[j] >= key){  

  41.                     j--;  

  42.                 }else{  

  43.                     array[i] = array[j]  

  44.                     //i++ ------------>>向后查找  

  45.                     while(j > ++i){  

  46.                         if(array[i] > key){  

  47.                             array[j] = array[i];  

  48.                             break;  

  49.                         }  

  50.                     }  

  51.                 }  

  52.             }  

  53.               

  54.             // 如果***個(gè)取出的 key 是最小的數(shù)  

  55.             if(tempi == i){  

  56.                 Sort(++i, tempj);  

  57.                 return ;  

  58.             }  

  59.               

  60.             // ***一個(gè)空位留給 key  

  61.             array[i] = key;  

  62.               

  63.             // 遞歸  

  64.             Sort(tempi, i);  

  65.             Sort(j, tempj);  

  66.         }  

  67.           

  68.         Sort(i, j);  

  69.           

  70.         return array;  

  71.     },  

  72.       

  73.     // 插入排序  

  74.     insertSort:function(array){  

  75.           

  76.         // http://baike.baidu.com/image/d57e99942da24e5dd21b7080  

  77.         // http://baike.baidu.com/view/396887.htm  

  78.         //var array = 
    [0,1,2,44,4,324,5,65,6,6,34,4,5,6,2,43,5,6,62,43,5,1,4,51,56,76,7,7,2,1,45,4,6,7];  

  79.           

  80.         var i = 1, j, temp, key,  

  81.             len = array.length;  

  82.           

  83.         for(; i < len; i++){  

  84.               

  85.             temp = j = i;  

  86.             key = array[j];  

  87.               

  88.             while(--j > -1){  

  89.                 if(array[j] > key){  

  90.                     array[j+1] = array[j];  

  91.                 }else{  

  92.                     break;  

  93.                 }  

  94.             }  

  95.               

  96.             array[j+1] = key;  

  97.         }  

  98.           

  99.         return array;  

  100.     },  

  101.       

  102.     // 希爾排序  

  103.     //Jun.array.shellSort(Jun.array.df(10000));  

  104.     shellSort:function(array){  

  105.  

  106.         // http://zh.wikipedia.org/zh/%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F  

  107.         // var array = [13,14,94,33,82,25,59,94,65,23,45,27,73,25,39,10];  

  108.           

  109.         var tempArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1];   

  110. // reverse() 在維基上看到這個(gè)***的步長 較小數(shù)組  

  111.         //var tempArr = [1031612713, 217378076, 45806244,   

  112. 9651787, 2034035, 428481, 90358, 19001, 4025, 836, 182, 34, 9, 1]  

  113. //針對大數(shù)組的步長選擇  

  114.         var i = 0;  

  115.         var tempArrtempArrLength = tempArr.length;  

  116.         var len = array.length;  

  117.         var len2 =  parseInt(len/2);  

  118.           

  119.         for(;i < tempArrLength; i++){  

  120.             if(tempArr[i] > len2){  

  121.                 continue;  

  122.             }  

  123.               

  124.             tempSort(tempArr[i]);  

  125.         }  

  126.  

  127.         // 排序一個(gè)步長  

  128.         function tempSort(temp){  

  129.               

  130.             //console.log(temp) 使用的步長統(tǒng)計(jì)  

  131.               

  132.             var i = 0, j = 0, f, tem, key;  

  133.             var tempLen = len%temp > 0 ?  parseInt(len/temp) + 1 : len/temp;   

  134.               

  135.               

  136.             for(;i < temp; i++){// 依次循環(huán)列  

  137.  

  138.                 for(j=1;/*j < tempLen && */temp * j + i < len; j++){
    //依次循環(huán)每列的每行  

  139.                     tem = f = temp * j + i;  

  140.                     key = array[f];  

  141.  

  142.                     while((tem-=temp) >= 0){  

  143. // 依次向上查找  

  144.                         if(array[tem] > key){  

  145.                             array[tem+temp] = array[tem];  

  146.                         }else{  

  147.                             break;  

  148.                         }  

  149.                     }  

  150.                       

  151.                     array[tem + temp ] = key;  

  152.                       

  153.                 }  

  154.             }  

  155.               

  156.         }  

  157.           

  158.         return array;  

  159.           

  160.     } 

上述就是小編為大家分享的JavaScript中有哪些排序算法了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI