學習一下幾個日常的算法排序問題
1. 冒泡排序
實現:用for循環遍歷數組元素,拿出前一個和后一個元素對比,如果前邊的值大於后邊的值就交換位置,遍歷元素進行排序。
圖片應該看起來更清晰:
var arr = [89,12,8,14,23,45,9,15,33]; function bubble_sort(arr){ var len = arr.length; if(arr.length ==1) { return } for(var i = 0; i < len; i++) { for(var j = 0; j < len-1; j++) { //如果前一個值比后一個值大,那么交換位置 if(arr[j] > arr[j+1]) { var temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } return arr; } //測試一下代碼 bubble_sort(arr); //log [8, 9, 12, 14, 15, 23, 33, 45, 89]
2.快速排序
算法實現:
1.在數據集之中,選擇一個元素作為”基准”(pivot)。
2.所有小於”基准”的元素,都移到”基准”的左邊;所有大於”基准”的元素,都移到”基准”的右邊。這個操作稱為分區 (partition)操作,分區操作結束后,基准元素所處的位置就是最終排序后它的位置。
3.對”基准”左邊和右邊的兩個子集,不斷重復第一步和第二步,直到所有子集只剩下一個元素為止。
圖示:

function quickSort(arr){ //如果數組<=1,則直接返回 if(arr.length<=1){return arr;} var pivotIndex=Math.floor(arr.length/2); //找基准,並把基准從原數組刪除 var pivot=arr.splice(pivotIndex,1)[0]; //定義左右數組 var left=[]; var right=[]; //比基准小的放在left,比基准大的放在right for(var i=0;i<arr.length;i++){ if(arr[i]<=pivot){ left.push(arr[i]); } else{ right.push(arr[i]); } } //遞歸 return quickSort(left).concat([pivot],quickSort(right)); }
.選擇排序
算法實現思路:
選擇排序(Selection Sort)是一種簡單直觀的排序算法。它的工作原理如下,首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續尋找最小(大)元素,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

function selectionSort(array) { var length = array.length, i, j, minIndex, minValue, temp; for (i = 0; i < length - 1; i++) { minIndex = i; minValue = array[minIndex]; for (j = i + 1; j < length; j++) { if (array[j] < minValue) { minIndex = j; minValue = array[minIndex]; } } // 交換位置 temp = array[i]; array[i] = minValue; array[minIndex] = temp; } return array }