JS數(shù)組排序技巧匯總(冒泡、sort驳遵、快速淫奔、希爾等排序)

本文實例總結(jié)了JS數(shù)組排序技巧。分享給大家供大家參考堤结,具體如下:

1唆迁、冒泡排序

var temp = 0;
for (var i = 0; i < array.length; i++)
{
for (var j = 0; j < array.length - i; j++)
{
if (array[j] > array[j + 1])
{
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
}
console.log(array);

結(jié)果如下:

圖片.png

2、sort排序

  var arrSimple=new Array(1,8,7,6,2,5);
        arrSimple.sort();
       // document.writeln(arrSimple.join());
       console.log(arrSimple.join())

效果如下:

圖片.png

3竞穷、 快速排序

function quickSort(arr){  
        if(arr.length<=1){//如果數(shù)組只有一個數(shù)唐责,就直接返回;  
            return arr;  
        }  
        var num=Math.floor(arr.length/2);//找到中間數(shù)的索引值瘾带,如果是浮點數(shù)鼠哥,則向下取整  
        var newValue=arr.splice(num,1);//找到中間數(shù)的值  
        var left=[],right=[];  
        for(var i=0;i<arr.length;i++){  
            if(arr[i]<newValue){  
                left.push(arr[i]);//基準(zhǔn)點的左邊的數(shù)傳到左邊數(shù)組  
            }else{  
                right.push(arr[i]);//基準(zhǔn)點的右邊的數(shù)傳到右邊數(shù)組  
            }  
        }  
        return quickSort(left).concat(newValue,quickSort(right));//遞歸不斷重復(fù)比較  
    }  
    console.log(quickSort([31,4,5,52,1,8])); 

效果如圖:

圖片.png

4、希爾排序

function shellSort(nums){//希爾排序
        var gaps=[5,3,1];//定義間隔區(qū)間
        for(var g=0;g<gaps.length;g++){//一個一個間隔值開始
            for(var i=gaps[g];i<nums.length;i++){//以間隔值遍歷
                var temp=nums[i];//選中元素
                for(var j=i;j>=gaps[g]&&nums[j-gaps[g]]>temp;j-=gaps[g]){//如果前面一個大于后面一個
                    nums[j]=nums[j-gaps[g]];//后移
                }
                nums[j]=temp;//填補
            }
        }
    }
    function show(nums){//顯示數(shù)組
        for(var i=0;i<nums.length;i++){
            document.write(nums[i]+' ');
        }
        document.write('<br>');
    }
    var nums=[6,0,2,9,3,5,8,0,5,4];
    show(nums);//6 0 2 9 3 5 8 0 5 4
    shellSort(nums);//希爾排序
    show(nums);//0 0 2 3 4 5 5 6 8 9

效果如圖:

圖片.png

5、插入排序

function sort(elements){
  //假設(shè)第0個元素是一個有序的數(shù)列朴恳,第1個以后的是無序的序列科盛,
  //所以從第1個元素開始將無序數(shù)列的元素插入到有序數(shù)列中
  for(var i = 1; i < elements.length; i++){
    //升序
    if(elements[i] < elements[i-1]){
      //取出無序數(shù)列中的第i個作為被插入元素
      var guard = elements[i];
      //記住有序數(shù)列的最后一個位置,并且將有序數(shù)列位置擴大一個
      var j = i - 1;
      elements[i] = elements[j];
      
      //比大小菜皂,找到被插入元素所在的位置
      while(j >= 0 && guard < elements[j]){
        elements[j+1] = elements[j];
        j--;
      }

      //插入
      elements[j+1] = guard;
    }
  }
}

var elements = [10, 9, 8, 7, 6, 5];
console.log('before: ' + elements);
sort(elements);
console.log(' after: ' + elements);

效果如圖:

圖片.png

6贞绵、選擇排序:

function order(arry){
    var ary=arry
    function sorrt() {
    length = ary.length;
    for (var i = 0; i < length; i++) {
        _min = ary[i]
        k = i
        for (var j = i + 1; j < length; j++) {
            if (_min > ary[j]) {
                _min = ary[j]
                k = j
            }
        }
        ary[k] = ary[i]
        ary[i] = _min
    }
    return ary;
}
    return {sor:sorrt};
    }
     
var k=order([14,12,6,5,18,0,1,3,2])
console.log(k.sor())

效果如下:

圖片.png

附:js中數(shù)組(Array)的排序(sort)注意事項

var arrDemo = new Array();
arrDemo[0] = 10;
arrDemo[1] = 50;
arrDemo[2] = 51;
arrDemo[3] = 100;
arrDemo.sort(); //調(diào)用sort方法后,數(shù)組本身會被改變恍飘,即影響原數(shù)組
alert(arrDemo);//10,100,50,51 默認(rèn)情況下sort方法是按ascii字母順序排序的榨崩,而非我們認(rèn)為是按數(shù)字大小排序
arrDemo.sort(function(a,b){return a>b?1:-1});//從小到大排序
alert(arrDemo);//10,50,51,100
arrDemo.sort(function(a,b){return a<b?1:-1});//從大到小排序
alert(arrDemo);//100,51,50,10

原文作者:祈澈姑娘
技術(shù)博客:http://www.reibang.com/u/05f416aefbe1
90后前端妹子,愛編程章母,愛運營母蛛,愛折騰。
堅持總結(jié)工作中遇到的技術(shù)問題乳怎,堅持記錄工作中所所思所見彩郊,歡迎大家一起探討交流。

文末福利:關(guān)注「編程微刊」公眾號 蚪缀,在微信后臺回復(fù)「領(lǐng)取資源」秫逝,獲取IT資源200G干貨大全。公眾號回復(fù)“1”询枚,拉你進(jìn)程序員技術(shù)討論群

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末违帆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子金蜀,更是在濱河造成了極大的恐慌刷后,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渊抄,死亡現(xiàn)場離奇詭異尝胆,居然都是意外死亡,警方通過查閱死者的電腦和手機护桦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門含衔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嘶炭,你說我怎么就攤上這事抱慌。” “怎么了眨猎?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵抑进,是天一觀的道長。 經(jīng)常有香客問我睡陪,道長寺渗,這世上最難降的妖魔是什么匿情? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮信殊,結(jié)果婚禮上炬称,老公的妹妹穿的比我還像新娘。我一直安慰自己涡拘,他們只是感情好玲躯,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鳄乏,像睡著了一般跷车。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上橱野,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天朽缴,我揣著相機與錄音,去河邊找鬼水援。 笑死密强,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜗元。 我是一名探鬼主播或渤,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼许帐!你這毒婦竟也來了劳坑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤成畦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后涝开,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體循帐,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年舀武,在試婚紗的時候發(fā)現(xiàn)自己被綠了拄养。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡银舱,死狀恐怖瘪匿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寻馏,我是刑警寧澤棋弥,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站诚欠,受9級特大地震影響顽染,放射性物質(zhì)發(fā)生泄漏漾岳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一粉寞、第九天 我趴在偏房一處隱蔽的房頂上張望尼荆。 院中可真熱鬧,春花似錦唧垦、人聲如沸捅儒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽野芒。三九已至,卻和暖如春双炕,著一層夾襖步出監(jiān)牢的瞬間狞悲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工妇斤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留摇锋,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓站超,卻偏偏與公主長得像荸恕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子死相,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個記錄插入到已排序好...
    依依玖玥閱讀 1,239評論 0 2
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,504評論 25 707
  • 概述排序有內(nèi)部排序和外部排序融求,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大算撮,一次不能容納全部的...
    Luc_閱讀 2,255評論 0 35
  • UBUNTU SCALA安裝 下載 官方下載地址本文下載的版本scala-2.12.1.tgzwget http:...
    yaohwang閱讀 507評論 0 0
  • 分別的時候肮柜,沒有說再見陷舅,當(dāng)時覺得太矯情,現(xiàn)在發(fā)現(xiàn)审洞,不是矯情莱睁,而是再見的承諾太過遙不可及。 大學(xué)畢業(yè)的時候芒澜,不記得道...
    安然向暖k閱讀 332評論 0 1