常見演算法
阿新 • • 發佈:2020-07-27
排序
氣泡排序
- 從第一個元素開始,把當前元素和下一個索引元素進行比較。如果當前元素大,那麼就交換位置,重複操作比較至最後一個元素,此時最後一個元素就是最大的數。下一輪重複以上操作,此時無需比較最後一個元素,只需比較到
length-2
位置。 - 實現程式碼如下:
function bubble(array) { checkArray(array) for (let i = array.length - 1; i > 0; i--) { for (let j = 0; j < i; j++) { if (array[j] > array[j + 1]) swap(array, j, j+1) } } return array }
- 該演算法操作次數是一個等差數列
n + (n - 1) + (n - 2) + 1
,,去掉常數項以後得出時間複雜度是 O(n * n)
插入排序
- 第一個元素預設是已排序元素,取出下一個元素和當前元素比較,如果當前元素大就交換位置,那麼此時第一個元素就是當前最小值,所以下次取出操作從第三個元素開始,向前對比,重複之前的操作。
- 實現程式碼如下:
function insertion(arr) { if (!checkArray(arr)) return for (let i = 1; i < arr.length; i++) { for (let j = i - 1; j > 0 && arr[j] > arr[j + 1]; j --) { swap(array, j, j + 1) } } }
- 該演算法操作次數是一個等差數列
n + (n - 1) + (n - 2) + 1
,,去掉常數項以後得出時間複雜度是 O(n * n)
選擇排序
- 原理如下:遍歷陣列,設定最小值的索引為0,如果取出的值比當前最小值小,就替換最小值索引;遍歷完成後,將第一個元素和最小值索引上的值交換。從索引1 開始重複操作。
- 實現程式碼如下:
function selection(arr) { if (!checkArr(arr)) return for (let i = 0; i < arr.length - 1; i ++ ) { minIndex = array[j] < array[minIndex] ? j : minIndex; } swap(array, i, minIndex); } return array; }
- 該演算法操作次數是一個等差數列
n + (n - 1) + (n - 2) + 1
,,去掉常數項以後得出時間複雜度是 O(n * n)