functionbubbleSort(arr) { for (let j = 0; j < arr.length - 1; j++) { for (let i = j + 1; i < arr.length ; i++) { if (arr[j] > arr[i]) [arr[i], arr[j]] = [arr[j], arr[i]] } } return arr }
let res = bubbleSort([5, 4, 1, 26, 99, 78, 33, 2]) console.log(res)
選擇排序
選擇排序還算好理解, 就是把最小的丟到最前面, 與第一個尚未排序元素交換, 然後進行下一輪找最小的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
functionselectionSort(arr) { for (let j = 0; j < arr.length; j++) { let minIndex = j //找到最小值 for (let i = j; i < arr.length; i++) { if (arr[minIndex] > arr[i]) { minIndex = i } } //跟最左邊的值互換 [arr[j], arr[minIndex]] = [arr[minIndex], arr[j]] }
return arr }
let res = selectionSort([5, 1, 3, 2, 7, 4]) console.log(res)
插入排序
課程的邏輯我自己覺得有點難懂, 我用我自己的方式去實作, 不過這樣不曉得還算不算是插入排序?
1 2 3 4 5 6 7 8 9 10 11 12 13
functioninsertionSort(arr) { for (let i = 1; i < arr.length; i++) { let rightIndex = i let leftIndex = i - 1 while (leftIndex >= 0 && arr[rightIndex] < arr[leftIndex]) { [arr[rightIndex], arr[leftIndex]] = [arr[leftIndex], arr[rightIndex]] leftIndex-- rightIndex-- } }
return arr }
課程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
functioninsertionSort(arr) { for (let j = 1; j <= arr.length - 1; j++) { let key = arr[j]; i = j - 1; while (i >= 0 && arr[i] > key) { arr[i + 1] = arr[i]; i -= 1; } arr[i + 1] = key;