自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JavaScript版幾種常見排序算法分享

開發(fā) 前端 算法
Javascript是一種由Netscape的LiveScript發(fā)展而來的原型化繼承的面向?qū)ο蟮膭?dòng)態(tài)類型的區(qū)分大小寫的客戶端腳本語言,主要目的是為了解決服務(wù)器端語言,比如Perl,遺留的速度問題,為客戶提供更流暢的瀏覽效果。

說明

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

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

個(gè)人理解

 ·  冒泡排序:最簡(jiǎn)單,也最慢,貌似長(zhǎng)度小于7***

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

 ·  快速排序:這是一個(gè)非常快的排序方式,V8的sort方法就使用快速排序和插入排序的結(jié)合

 ·  希爾排序:在非chrome下數(shù)組長(zhǎng)度小于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 = 0len = 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è)***的步長(zhǎng) 較小數(shù)組  
  111.         //var tempArr = [1031612713, 217378076, 45806244,   
  112. 9651787, 2034035, 428481, 90358, 19001, 4025, 836, 182, 34, 9, 1]  
  113. //針對(duì)大數(shù)組的步長(zhǎng)選擇  
  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è)步長(zhǎng)  
  128.         function tempSort(temp){  
  129.               
  130.             //console.log(temp) 使用的步長(zhǎng)統(tǒng)計(jì)  
  131.               
  132.             var i = 0j = 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.     } 

原文鏈接:http://www.cnblogs.com/idche/archive/2011/02/16/1956397.html

【編輯推薦】

  1. 10個(gè)令人驚奇的HTML5和JavaScript效果
  2. JavaScript對(duì)象及繼承教程之內(nèi)置對(duì)象
  3. JavaScript內(nèi)存回收機(jī)制深入解讀
  4. JavaScript初學(xué)者應(yīng)注意的七個(gè)細(xì)節(jié)
  5. 寫了10年Javascript未必全了解的連續(xù)賦值運(yùn)算
責(zé)任編輯:陳貽新 來源: 魯軍的博客
相關(guān)推薦

2017-11-22 14:20:07

前端JavaScript排序算法

2021-09-04 23:40:53

算法程序員前端

2022-09-24 09:03:55

前端單元測(cè)試冒泡排序

2021-11-10 09:17:18

程序員排序算法搜索算法

2023-02-09 07:39:01

2022-05-17 12:23:25

排序算法面試

2012-01-09 14:29:15

Java算法

2020-05-08 11:13:28

Python數(shù)據(jù)技術(shù)

2022-11-01 18:29:25

Go語言排序算法

2023-12-04 07:49:06

選擇排序排序算法

2017-03-17 14:18:34

JavaScript算法問題詳解

2021-02-26 05:29:11

排序算法數(shù)組

2021-02-22 07:29:07

算法初級(jí)排序

2024-08-30 14:34:00

2021-09-30 07:57:13

排序算法面試

2016-09-30 14:23:16

數(shù)據(jù)結(jié)構(gòu)算法八大排序算法

2017-07-18 10:50:38

前端JavaScript排序算法

2009-12-17 17:46:26

Ruby編寫問題

2011-03-29 14:58:24

存儲(chǔ)備份

2019-10-30 08:53:46

JavaScript冒泡排序選擇排序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)