js數組常用的一些排序法

來源:互聯網
上載者:User

本文主要和大家分享js數組常用的一些排序法,有冒泡排序、快速排序、插入排序等,希望能協助到大家。

1. 冒泡排序(從後向前)

var array = [1,4,-8,-3,6,12,9,8];function sort(arr){    for(var j=0;j<arr.length-1;j++){    //兩兩比較,如果前一個比後一個大,則交換位置。       for(var i=0;i<arr.length-1-j;i++){            if(arr[i]>arr[i+1]){                var temp = arr[i];                arr[i] = arr[i+1];                arr[i+1] = temp;            }        }     }}sort(array);document.write(array);

(1)比較相鄰的元素。如果第一個比第二個大,就交換他們兩個位置。

(2)對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

(3)針對所有的元素重複以上的步驟,除了最後一個。

(4)持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

2. 快速排序:遞迴思想,兩邊快速的排序,冒泡排序的改進

var array = [1,4,-8,-3,6,12,9,8];function quickSort(arr){//如果數組長度小於等於1,則返回數組本身   if(arr.length<=1){        return arr;   }    //定義中間值的索引   var index = Math.floor(arr.length/2);    //取到中間值   var temp = arr.splice(index,1);    //定義左右部分數組   var left = [];    var right = [];    for(var i=0;i<arr.length;i++){    //如果元素比中間值小,那麼放在左邊,否則放右邊       if(arr[i]<temp){            left.push(arr[i]);       }else{            right.push(arr[i]);       }   }    return quickSort(left).concat(temp,quickSort(right));}document.write(quickSort(array));

Math.floor(x)方法是向下取整,返回小於或等於x的最接近的整數。

splice(index,num,item)方法是向數組中添加項目,或是從數組中刪除項目,並返回被刪除的項目。

index是整數,被操作項目所在的位置(必須)

num是整數,要刪除的項目的數量,如果為0,表示不刪除(必須)

item是向數組中添加的新項目,可以是多個(可選)

push()方法是向數組末尾添加一個或多個新項目並返回新數組的長度

concat()方法串連兩個或多個數組,不會改變原有數組,返回一個新數組

3. 插入排序

var array = [1,4,-8,-3,6,12,9,8];function insertSort(arr){//假設第0元素是有序序列,第1元素之後是無序的序列。從第1元素開始依次將無序序列的元素插入到有序序列中   for(var i=1; i<arr.length;i++){        if(arr[i]<arr[i-1]){            //取出無序序列中需要插入的第i個元素           var temp = arr[i];            //定義有序中的最後一個位置           var j = i-1;           arr[i] = arr[j];            //比較大小,找到插入的位置           while(j>=0&&temp<arr[j]){               arr[j+1] = arr[j];               j--;           };            //插入           arr[j+1] = temp;       }   } }insertSort(array)document.write(array);

(1)從第一個元素開始,該元素可以認為已經被排序

(2)取出下一個元素,在已經排序的元素序列中掃描

(3)如果該元素(已排序)大於新元素,將該元素移到下一位置

(4)重複步驟3,直到找到已排序的元素小於或者等於新元素的位置

(5)將新元素插入到下一位置中

(6)重複步驟2

4. 選擇排序

var array = [1,4,-8,-3,6,12,9,8];function selectSort(arr){    for(var i=0;i<arr.length;i++){        //設定當前範圍最小值和索引       var min = arr[i];        var minIndex = i;        //在該範圍選出最小值       for(var j=i+1;j<arr.length;j++){            if(min>arr[j]){               min = arr[j];               minIndex = j;           }       }        //將最小值插入,並將原來位置的最小值刪除       arr.splice(i,0,min);       arr.splice(minIndex+1,1);   }}selectSort(array);document.write(array);

(1)在未排序序列中找到最小(大)元素

(2)並存放到排序序列的起始位置

(3)然後,再從剩餘未排序元素中繼續尋找最小(大)元素

(4)然後放到已排序序列的末尾。

(5)以此類推

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.