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

本文實(shí)例總結(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ù)組只有一個(gè)數(shù),就直接返回;  
            return arr;  
        }  
        var num=Math.floor(arr.length/2);//找到中間數(shù)的索引值,如果是浮點(diǎn)數(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)點(diǎn)的左邊的數(shù)傳到左邊數(shù)組  
            }else{  
                right.push(arr[i]);//基準(zhǔn)點(diǎ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++){//一個(gè)一個(gè)間隔值開(kāi)始
            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]){//如果前面一個(gè)大于后面一個(gè)
                    nums[j]=nums[j-gaps[g]];//后移
                }
                nums[j]=temp;//填補(bǔ)
            }
        }
    }
    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個(gè)元素是一個(gè)有序的數(shù)列,第1個(gè)以后的是無(wú)序的序列,
  //所以從第1個(gè)元素開(kāi)始將無(wú)序數(shù)列的元素插入到有序數(shù)列中
  for(var i = 1; i < elements.length; i++){
    //升序
    if(elements[i] < elements[i-1]){
      //取出無(wú)序數(shù)列中的第i個(gè)作為被插入元素
      var guard = elements[i];
      //記住有序數(shù)列的最后一個(gè)位置,并且將有序數(shù)列位置擴(kuò)大一個(gè)
      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)注意事項(xiàng)

var arrDemo = new Array();
arrDemo[0] = 10;
arrDemo[1] = 50;
arrDemo[2] = 51;
arrDemo[3] = 100;
arrDemo.sort(); //調(diào)用sort方法后,數(shù)組本身會(huì)被改變,即影響原數(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.itdecent.cn/u/05f416aefbe1
90后前端妹子,愛(ài)編程,愛(ài)運(yùn)營(yíng),愛(ài)折騰。
堅(jiān)持總結(jié)工作中遇到的技術(shù)問(wèn)題,堅(jiān)持記錄工作中所所思所見(jiàn),歡迎大家一起探討交流。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個(gè)記錄插入到已排序好...
    依依玖玥閱讀 1,347評(píng)論 0 2
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,781評(píng)論 25 709
  • 概述排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的...
    Luc_閱讀 2,370評(píng)論 0 35
  • UBUNTU SCALA安裝 下載 官方下載地址本文下載的版本scala-2.12.1.tgzwget http:...
    yaohwang閱讀 540評(píng)論 0 0
  • 分別的時(shí)候,沒(méi)有說(shuō)再見(jiàn),當(dāng)時(shí)覺(jué)得太矯情,現(xiàn)在發(fā)現(xiàn),不是矯情,而是再見(jiàn)的承諾太過(guò)遙不可及。 大學(xué)畢業(yè)的時(shí)候,不記得道...
    安然向暖k閱讀 415評(píng)論 0 1

友情鏈接更多精彩內(nèi)容