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