冒泡排序
const bubbleSort = (arr) => {
if (arr.length <= 1) return arr;
for (let i = 0; i <= arr.length - 1; i++) {
let flag = true;
for (let j = 0; j <= arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
flag = false;
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
}
}
if (flag) {
break;
}
}
return arr;
}
选择排序
const selectSort = (arr) => {
let len = arr.length;
if (len <= 1) return arr;
for (let i = 0; i < len; i++) {
let min = i;
for (let j = min + 1; j < len; j++) {
if (arr[min] > arr[j]) {
min = j;
}
}
[arr[min], arr[i]] = [arr[i], arr[min]]
}
return arr;
}
插入排序
const insetSort = (arr) => {
let len = arr.length;
if (len <= 1) return arr;
for (let i = 1; i < len; i++) {
let tmp = arr[i]
let j = i;
while (arr[j - 1] > tmp && j > 0) {
arr[j] = arr[j - 1]
j--
}
arr[j] = tmp
}
return arr;
}
希尔排序
const shellSort = (arr) => {
let len = arr.length;
if (len <= 1) return arr;
let gap = Math.floor(len / 2);
while (gap >= 1) {
for (let i = gap; i < len; i++) {
let tmp = arr[i];
let j = i;
while (arr[j - gap] > tmp && j > gap - 1) {
arr[j] = arr[j - gap]
j -= grap;
}
arr[j] = tmp;
}
gap = Math.floor(gap / 2)
}
return arr;
}
归并排序
const merge = (leftArr, rightArr) => {
const result = []
while (leftArr.length && rightArr.length) {
leftArr[0] > rightArr[0] ? result.push(rightArr.shift()) : result.push(leftArr.shift())
}
while (leftArr.length) {
result.push(leftArr.shift())
}
while (rightArr.length) {
result.push(rightArr.shift())
}
return result;
}
const mergeSort = (arr) => {
if (arr.length <= 1) return arr;
const minIndex = Math.floor(arr.length / 2) | 0;
let leftArr = arr.slice(0, minIndex);
let rightArr = arr.slice(minIndex, arr.length)
return merge(mergeSort(leftArr), mergeSort(rightArr))
}
快速排序
const quickSort = (arr) => {
if (arr.length <= 1) return arr;
const pivot = Math.floor(arr.length / 2) | 0;
const curItem = arr.splice(pivot, 1)[0];
let leftArr = [], rightArr = [];
arr.forEach(item => {
item <= curItem ? leftArr.push(item) : rightArr.push(item)
});
return quickSort(leftArr).concat(curItem).concat(quickSort(rightArr))
}
const quickSort2 = (arr, left, right) => {
if (left < right) {
let pos = left - 1
for (let i = left; i <= right; i++) {
let pivot = arr[right]
if (arr[i] <= pivot) {
pos++
let temp = arr[pos]
arr[pos] = arr[i]
arr[i] = temp
}
}
quickSort2(arr, left, pos - 1)
quickSort2(arr, pos + 1, right)
}
return arr
}
