JS常見演算法
阿新 • • 發佈:2018-11-23
1、氣泡排序
排序後2個相等鍵值的順序和排序之前它們的順序相同
- 什麼時候最快(Best Cases): 當輸入的資料已經是正序時
- 什麼時候最慢(Worst Cases): 當輸入的資料是反序時
function bubbleSort(arr) { var len = arr.length; for (var i = 0; i < len; i++) { for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j+1]) { //相鄰元素兩兩對比 var temp = arr[j+1]; //元素交換 arr[j+1] = arr[j]; arr[j] = temp; } } } return arr; } bubbleSort([1,0,9,5,7,3,6]) //結果是[0, 1, 3, 5, 6, 7, 9]
2、選擇排序
在時間複雜度上表現最穩定的排序演算法之一,因為無論什麼資料進去都是一樣時間的複雜度。。。所以用到它的時候,資料規模越小越好
function selectionSort(arr) { var len = arr.length; var minIndex, temp; for (var i = 0; i < len - 1; i++) { minIndex = i; for (var j = i + 1; j < len; j++) { if (arr[j] < arr[minIndex]) { //尋找最小的數 minIndex = j; //將最小數的索引儲存 } } temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } return arr; } selectionSort([1,0,9,5,7,3,6]) //結果是[0, 1, 3, 5, 6, 7, 9]
3、插入排序
顧名思義,就是向撲克牌一樣插入法排序
function insertionSort(arr) { var len = arr.length; var preIndex, current; for (var i = 1; i < len; i++) { preIndex = i - 1; current = arr[i]; while(preIndex >= 0 && arr[preIndex] > current) { arr[preIndex+1] = arr[preIndex]; preIndex--; } arr[preIndex+1] = current; } return arr; } insertionSort([1,0,9,5,7,3,6]) //結果是[0, 1, 3, 5, 6, 7, 9]