成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 前端 算法
Javascript是一種由Netscape的LiveScript發展而來的原型化繼承的面向對象的動態類型的區分大小寫的客戶端腳本語言,主要目的是為了解決服務器端語言,比如Perl,遺留的速度問題,為客戶提供更流暢的瀏覽效果。

說明

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

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

個人理解

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

 ·  插入排序: 比冒泡快,比快速排序和希爾排序慢,較小數據有優勢

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

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

 ·  系統方法:在forfox下系統的這個方法非???br />  

 

  1.  // ---------- 一些排序算法  
  2.     // js 利用sort進行排序  
  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.             // 結束條件  
  32.             if(i == j ){ return };  
  33.               
  34.             var key = array[i];  
  35.             var tempi = i; // 記錄開始位置  
  36.             var tempj = j; // 記錄結束位置  
  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.             // 如果***個取出的 key 是最小的數  
  55.             if(tempi == i){  
  56.                 Sort(++i, tempj);  
  57.                 return ;  
  58.             }  
  59.               
  60.             // ***一個空位留給 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() 在維基上看到這個***的步長 較小數組  
  111.         //var tempArr = [1031612713, 217378076, 45806244,   
  112. 9651787, 2034035, 428481, 90358, 19001, 4025, 836, 182, 34, 9, 1]  
  113. //針對大數組的步長選擇  
  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.         // 排序一個步長  
  128.         function tempSort(temp){  
  129.               
  130.             //console.log(temp) 使用的步長統計  
  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++){// 依次循環列  
  137.  
  138.                 for(j=1;/*j < tempLen && */temp * j + i < len; j++){
    //依次循環每列的每行  
  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個令人驚奇的HTML5和JavaScript效果
  2. JavaScript對象及繼承教程之內置對象
  3. JavaScript內存回收機制深入解讀
  4. JavaScript初學者應注意的七個細節
  5. 寫了10年Javascript未必全了解的連續賦值運算
責任編輯:陳貽新 來源: 魯軍的博客
相關推薦

2017-11-22 14:20:07

前端JavaScript排序算法

2021-09-04 23:40:53

算法程序員前端

2022-09-24 09:03:55

前端單元測試冒泡排序

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數據技術

2022-11-01 18:29:25

Go語言排序算法

2025-06-16 09:23:01

2023-12-04 07:49:06

選擇排序排序算法

2017-03-17 14:18:34

JavaScript算法問題詳解

2021-02-22 07:29:07

算法初級排序

2021-02-26 05:29:11

排序算法數組

2024-08-30 14:34:00

2021-09-30 07:57:13

排序算法面試

2016-09-30 14:23:16

數據結構算法八大排序算法

2017-07-18 10:50:38

前端JavaScript排序算法

2009-12-17 17:46:26

Ruby編寫問題

2011-03-29 14:58:24

存儲備份
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线欧美激情 | 国产精品自拍啪啪 | 91黄色片免费看 | 久久成人精品一区二区三区 | 精品一级电影 | 欧美一区二区三区在线观看视频 | 波多野结衣精品在线 | 欧美午夜一区 | 最新中文字幕第一页视频 | 亚洲国产一区视频 | 在线观看中文字幕 | 精品一区二区在线看 | 91久久看片 | 新超碰97| 欧美日韩1区2区3区 欧美久久一区 | 精品影院| 一区在线播放 | 国产欧美精品 | 99re99| 午夜激情网 | 午夜精品久久久 | 中文字幕亚洲欧美日韩在线不卡 | 日韩中文字幕一区二区 | 久久久999精品 | 亚洲高清视频一区二区 | 国产成在线观看免费视频 | 国产精品一区二区欧美黑人喷潮水 | 国产精品久久毛片av大全日韩 | 黄色网址av| 成人在线免费视频 | 欧美成人一区二区 | 91亚洲精品久久久电影 | 精品一区二区三区四区五区 | 日本黄色大片免费 | 九九av| 国产精品久久久久久久久久久免费看 | 亚洲欧美日本在线 | 日韩在线小视频 | av免费看在线| 国产1区2区3区| 国产精品一区二区在线 |