js中的排序,這里介紹三種,sort()方法、冒泡排序、二分法排序。
1、sort方法
寫法: 數組.sort(); 返回排好序的數組,如果數組里是數字,則由小到大,如果是字符串,就按照第一個字符的字符編碼大小排序。
寫法2: 數組.sort(function(a,b){ return a-b }); 表示從大到小,(如果寫 retrun b-a 則由大到小排序);
不詳細解釋了。
2、冒泡排序。
原理是,直接將原理可能不好懂,我們還是按照下面的方法去講吧,這樣容易懂些。
//冒泡排序
function quickSort(arr){ for(var i=0; i<arr.length-1; i++){ console.log(i); for(var j=0; j<arr.length-i-1; j++){ if(arr[j] > arr[j+1]){ var oldVal = arr[j]; arr[j] = arr[j+1]; arr[j+1] = oldVal; } } } }
我們假設要排序的數組是arr = [10, 8, 7, 6];
原理:
這里arr長為3,外層循環三次,當外層for循環第一次循環的時候,即i=0的時候,進入里層循環,這時候將arr循環3次(4-0-1 = 3),即將arr的第一個數挨個於后面三個數比較,如果它大於后面的某個數,就與其交換位置,這次循環結束后,arr變成了[8, 7, 6, 10];
然后開始外層的i=1的循環,進入內層循環的時候,將arr 循環2次(4-1-1 =2),即,將arr第一數與后面的兩個數比較並交換位置,這次循環結束后,arr變成了[7, 6, 8 10];
然后開始完成的i=2的循環,進入內層循環的時候,將arr 循環1次(4-2-1 =1),即,將arr第一數與后面的兩個數比較並交換位置,這次循環結束后,arr變成了[6, 7, 8 10];
這樣就排好序了,其實原理很簡單,就是利用內層循環將arr的第一個往后比較,大則后移,一次循環以后,最大的就再最后面了,這時我們只需要把前面3個再次進行比較,最大的放到倒數第二位,然后再把最前面2個進行比較,這樣只需要再套一層循環讓內層for循環的可以每次循環減少1個比較長度直到最前面兩個最小的也比較完成即可。
3、二分法排序
方法如下,返回一個由小到大排序后的數組。(原理在代碼注釋中)
//二分法排序
function quickSort(arr){ if(arr.length<=1){ return arr; } var nowNober = arr.splice( Math.floor(arr.length/2), 1 ); //取得數組中間的值 var leftArr = []; var reightArr = []; for(var i=0; i<arr.length; i++){ if(parseInt(arr[i])<=nowNober){ leftArr.push(arr[i]); //把比中間值小的放一個數組 }else{ reightArr.push(arr[i]); //把比中間值大的放另一個數組 } } return quickSort(leftArr).concat(nowNober,quickSort(reightArr)) //在對小數組 、 大數組 繼續回調上面的分組方法,最后當數組長度只有一的時候,不再往下執行,把返回的單個數組層層拼裝新數組,即最后返回的排序好的數組 }
完!
