//冒泡bubble
function bubbleSort(arr) {
let l = arr.length;
for (let i = 0; i < l; i++) {
for (let j = 0; j < l - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
}
}
}
return arr;
}
//插入insert
function insertSort(arr) {
let l = arr.length;
for (let i = 1; i < l; i++) {
let temp = arr[i], j = i;
while (temp < arr[j - 1] && j > 0) {
arr[j] = arr[j - 1];
j--;
}
if (i !== j)
arr[j] = temp;
}
return arr;
}
//选择select
function seletSort(arr) {
let l = arr.length;
for (let i = 0; i < l; i++) {
let minIndex = i;
for (let j = i; j < l; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
if (minIndex !== i) {
[arr[minIndex], arr[i]] = [arr[i], arr[minIndex]]
}
}
return arr;
}
//归并merge
function mergeSort(arr) {
let l = arr.length;
if (l <= 1) {
return arr;
}
let mid = Math.floor(l / 2),
leftArr = arr.slice(0, mid),
rightArr = arr.slice(mid, l);
return merge(mergeSort(leftArr), mergeSort(rightArr));
}
function merge(leftArr, rightArr) {
let i = 0, j = 0, ll = leftArr.length, rl = rightArr.length, res = [];
while (i < ll && j < rl) {
if (leftArr[i] < rightArr[j]) {
res.push(leftArr[i]);
i++;
} else {
res.push(rightArr[j])
j++;
}
}
if (i < ll) {
res.push(...leftArr.slice(i, ll));
}
if (j < rl) {
res.push(...rightArr.slice(j, rl));
}
return res;
}
//快速 quick
function quickSort(arr) {
return quick(arr, 0, arr.length - 1)
}
function quick(arr, left, right) {
if (right > left) {
let index = partition(arr, left, right);
if (left < index - 1) {
quick(arr, left, index - 1)
}
if (index + 1 < right) {
quick(arr, index + 1, right)
}
}
return arr;
}
function partition(arr, left, right) {
let mid = Math.floor((left + right) / 2), i = left, j = right;
while (i < j) {
while (arr[i] < arr[mid]) {
i++;
}
while (arr[j] > arr[mid]) {
j--;
}
if (i < j) {
[arr[i], arr[j]] = [arr[j], arr[i]]
}
}
return i;
}