日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript版几种常见排序算法

發(fā)布時間:2025/3/13 javascript 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript版几种常见排序算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

說明

  • 寫這個主要是為了鍛煉自己,并無實(shí)際意義。
  • 每個瀏覽器測試得出的數(shù)據(jù)會不一樣。比如我用chrome 測試 一般快速排序都會最快,IE 則根據(jù)數(shù)組長度有可能希爾最快。
  • 不要用太大數(shù)據(jù)去測試冒泡排序(瀏覽器崩潰了我不管)
  • 如果有興趣可以 在線排序動畫 ?下載測試頁面

個人理解

  • 冒泡排序:最簡單,也最慢,貌似長度小于7最優(yōu)
  • 插入排序:?比冒泡快,比快速排序和希爾排序慢,較小數(shù)據(jù)有優(yōu)勢
  • 快速排序:這是一個非常快的排序方式,V8的sort方法就使用快速排序和插入排序的結(jié)合
  • 希爾排序:在chrome下數(shù)組長度小于1000,希爾排序比快速更快
  • 系統(tǒng)方法:在forfox下系統(tǒng)的這個方法非常快
// ---------- 一些排序算法 // js 利用sort進(jìn)行排序 systemSort: function(array) {return array.sort(function(a, b) {return a - b;}); }, // 冒泡排序 bubbleSort: function(array) {var i = 0,len = array.length,j, d;for (; i < len; i++) {for (j = 0; j < len; j++) {if (array[i] < array[j]) {d = array[j];array[j] = array[i];array[i] = d;}}}return array; }, // 快速排序 quickSort: function(array) {//var array = [8,4,6,2,7,9,3,5,74,5];//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];var i = 0;var j = array.length - 1;var Sort = function(i, j) {// 結(jié)束條件if (i == j) {return};var key = array[i];var stepi = i; // 記錄開始位置var stepj = j; // 記錄結(jié)束位置while (j > i) {// j <<-------------- 向前查找if (array[j] >= key) {j--;} else {array[i] = array[j]//i++ ------------>>向后查找while (j > ++i) {if (array[i] > key) {array[j] = array[i];break;}}}}// 如果第一個取出的 key 是最小的數(shù)if (stepi == i) {Sort(++i, stepj);return;}// 最后一個空位留給 keyarray[i] = key;// 遞歸 Sort(stepi, i);Sort(j, stepj);}Sort(i, j);return array; },// 插入排序 insertSort: function(array) {// http://baike.baidu.com/image/d57e99942da24e5dd21b7080// http://baike.baidu.com/view/396887.htm//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];var i = 1,j, step, key, len = array.length;for (; i < len; i++) {step = j = i;key = array[j];while (--j > -1) {if (array[j] > key) {array[j + 1] = array[j];} else {break;}}array[j + 1] = key;}return array; },// 希爾排序 //Jun.array.shellSort(Jun.array.df(10000)); shellSort: function(array) {// http://zh.wikipedia.org/zh/%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F// var array = [13,14,94,33,82,25,59,94,65,23,45,27,73,25,39,10];var stepArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1]; // reverse() 在維基上看到這個最優(yōu)的步長 較小數(shù)組//var stepArr = [1031612713, 217378076, 45806244, 9651787, 2034035, 428481, 90358, 19001, 4025, 836, 182, 34, 9, 1]//針對大數(shù)組的步長選擇var i = 0;var stepArrLength = stepArr.length;var len = array.length;var len2 = parseInt(len / 2);for (; i < stepArrLength; i++) {if (stepArr[i] > len2) {continue;}stepSort(stepArr[i]);}// 排序一個步長function stepSort(step) {//console.log(step) 使用的步長統(tǒng)計(jì)var i = 0,j = 0,f, tem, key;var stepLen = len % step > 0 ? parseInt(len / step) + 1 : len / step;for (; i < step; i++) { // 依次循環(huán)列for (j = 1;/*j < stepLen && */step * j + i < len; j++) { //依次循環(huán)每列的每行tem = f = step * j + i;key = array[f];while ((tem -= step) >= 0) { // 依次向上查找if (array[tem] > key) {array[tem + step] = array[tem];} else {break;}}array[tem + step] = key;}}}return array;}

?

轉(zhuǎn)載于:https://www.cnblogs.com/idche/archive/2011/02/16/1956397.html

總結(jié)

以上是生活随笔為你收集整理的JavaScript版几种常见排序算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。