目錄html
一、array排序函數sort數組
使用Array的sort方法。函數
var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2] arr.sort((a,b) => { return a - b }) console.log(arr) // 結果:[0, 2, 2, 2, 5, 5, 6, 7, 8]
二、冒泡排序ui
將數組中的相鄰兩個元素進行比較,將比較大(較小)的數經過兩兩比較移動到數組末尾(開始),執行一遍內層循環,肯定一個最大(最小)的數,外層循環從數組末尾(開始)遍歷到開始(末尾)。spa
var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2] for(var i=0;i<arr.length;i++) { for(var j=0;j<arr.length-1;j++) { if (arr[j]>arr[j+1]) { let news = arr[j] arr[j] = arr[j+1] arr[j+1] = news } } } console.log(arr) // 結果:[0, 2, 2, 2, 5, 5, 6, 7, 8]
三、選擇排序code
首先從原始數組中找到最小的元素,並把該元素放在數組的最前面,而後再從剩下的元素中尋找最小的元素,放在以前最小元素的後面,minIndex始終保存着最小值的位置的索引,隨着i的自增,遍歷的數組長度愈來愈短,直到完成排序。htm
var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2] for(var i=0;i<arr.length;i++) { var minIndex=i; for(var j=i+1;j<arr.length;j++) { if(arr[j]<arr[minIndex]){ minIndex=j } } if(minIndex!=i){ var news = arr[i]; arr[i]=arr[minIndex] arr[minIndex]=news } } console.log(arr) // 結果:[0, 2, 2, 2, 5, 5, 6, 7, 8]
四、插入排序blog
var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2] //假設第0個元素是一個有序的數列,第1個之後的是無序的序列, //因此從第1個元素開始將無序數列的元素插入到有序數列中 for(var i = 1; i < arr.length; i++){ //升序 if(arr[i] < arr[i-1]){ //取出無序數列中的第i個做爲被插入元素 var guard = arr[i]; //記住有序數列的最後一個位置,而且將有序數列位置擴大一個 var j = i - 1; arr[i] = arr[j]; //比大小,找到被插入元素所在的位置 while(j >= 0 && guard < arr[j]){ arr[j+1] = arr[j]; j--; } //插入 arr[j+1] = guard; } } console.log(arr) // 結果:[0, 2, 2, 2, 5, 5, 6, 7, 8]
五、快速排序排序
快速排序涉及到了遞歸,將一個數組的排序問題當作是兩個小數組的排序問題,而每一個小的數組又能夠繼續當作更小的兩個數組,一直遞歸下去,直到數組長度大小最大爲2。遞歸
var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2] function quickSort(arr){ if(arr.length<=1){//若是數組只有一個數,就直接返回; return arr; } var num=Math.floor(arr.length/2);//找到中間數的索引值,若是是浮點數,則向下取整 var newValue=arr.splice(num,1);//找到中間數的值 var left=[],right=[]; for(var i=0;i<arr.length;i++){ if(arr[i]<newValue){ left.push(arr[i]);//基準點的左邊的數傳到左邊數組 }else{ right.push(arr[i]);//基準點的右邊的數傳到右邊數組 } } return quickSort(left).concat(newValue,quickSort(right));//遞歸不斷重複比較 } console.log(quickSort(arr)) // 結果:[0, 2, 2, 2, 5, 5, 6, 7, 8]
參考