首頁  >  文章  >  後端開發  >  js數組常用的一些排序法

js數組常用的一些排序法

小云云
小云云原創
2018-03-15 15:41:021753瀏覽

本文主要跟大家分享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)以此類推

####

以上是js數組常用的一些排序法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn