插入排序
function insertionSort(arr) {
for (let i = 1; i < arr.length; i++) {
let key = array[i];
let j = i - 1;
while (j >= 0 && array[j] > key) {
array[j + 1] = array[j];
j--;
}
array[j + 1] = key;
}
return arr;
}
let array = [12, 11, 13, 5, 6];
console.log("Sorted array is:", insertionSort(array));
快排
- 也叫分治(Divide and Conquer)算法,将大问题拆分成小问题解决,
- 选取一个 pivot,大于 pivot 在之后,小于 pivot 在之前(先pivot,再切分)
function quickSort(arr) {
if (arr.length <= 1) return arr;
console.log("arr:", arr);
let pivotIndex = Math.floor(arr.length / 2);
console.log("pivotIndex:", pivotIndex);
let pivot = arr.splice(pivotIndex, 1)[0];
console.log("pivot:", pivot, 'arr->',arr);
let left = [];
let right = [];
for (let 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));
}
var arr = [5, 3, 7, 6, 2, 9];
console.log(quickSort(arr));
归并排序
function mergeSort(arr) {
if (arr.length < 2) return arr;
let middle = Math.floor(arr.length / 2);
let left = arr.slice(0, middle);
let right = arr.slice(middle, arr.length);
return merge(mergeSort(left), mergeSort(right));
}
function merge(left, right) {
let result = [];
while (left.length && right.length) {
if (left[0] <= right[0]) {
result.push(left.shift());
} else {
result.push(right.shift());
}
}
while (left.length) {
result.push(left.shift());
}
while (right.length) {
result.push(right.shift());
}
return result;
}
let array = [4, 2, 5, 22, 1, 6, 3, -3];
console.log("Sorted array is:", mergeSort(array));
参考