前言
排序的常用算法 之 有事没事敲一遍,下面的图片来自百度图片;
冒泡排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| function bubbleSort(arr) { if (!arr.length) return arr; const len = arr.length;
for (let i = 0; i < len; i++) { let flag = true; for (let j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; flag = false; } } if (flag) return arr; } return arr; }
|
选择排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| function selectSort(arr) {
if (!arr.length) return arr;
const len = arr.length; let minIndex;
for (let i = 0; i < len - 1; i++) { minIndex = i; for (let j = i; j < len; j++) { if (arr[minIndex] > arr[j]) { minIndex = j; } }
if (minIndex !== i) { [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]]; }
}
return arr }
|
插入排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| function insertSort(arr) { if (!arr.length) return arr;
const len = arr.length; let temp; for (let i = 0; i < len; i++) { temp = arr[i]; let j = i; while (j > 0 && arr[j - 1] > temp) { arr[j] = arr[j - 1]; j--; } arr[j] = temp;
}
return arr; }
|
归并排序
归并排序是对分治思想
的典型应用。
- 分解子问题
- 求解每个子问题
- 合并子问题的解,得出大问题的解
看图理解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
function mergeSort(arr) {
if (!arr && !arr.length) return
const len = arr.length;
if (arr.length === 1) return arr; const center = Math.floor(len / 2);
const leftArr = mergeSort(arr.slice(0, center)); const rightArr = mergeSort(arr.slice(center, len));
return mergeArr(leftArr, rightArr); }
console.log(mergeSort([2, 4, 6, 3, 4, 59, 12, 32, 7, 21]));
function mergeArr(arr1, arr2) { if (!arr1 && !arr2) return null; let i = 0, j = 0;
let len1 = arr1.length; let len2 = arr2.length;
let res = [];
while (i < len1 && j < len2) { if (arr1[i] < arr2[j]) { res.push(arr1[i]); i++; } else { res.push(arr2[j]); j++; } }
if (i < len1) { return res.concat(arr1.slice(i)); } else { return res.concat(arr2.slice(j)); }
}
|
more
排序算法还有很多,什么时候敲了再更新。