找出最大的排在后面
var bubbleSort = function (originalArray) {
var arr = [...originalArray];
for (let i = 1; i < arr.length; i += 1) {
for (let j = 1; j < arr.length - i; j += 1) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
找出最小的排在前面
var selectionSort = function (originalArray) {
var arr = [...originalArray];
for (let i = 0; i < arr.length - 1; i += 1) {
let minIndex = i;
for (let j = i + 1; j < arr.length; j += 1) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
if (minIndex !== i) {
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
}
}
return arr;
var insertionSort = function (originalArray) {
var arr = [...originalArray];
for (let i = 0; i < arr.length; i++) {
let currentIndex = i;
while (
arr[currentIndex - 1] !== undefined
&& arr[currentIndex] < arr[currentIndex - 1]
) {
[arr[currentIndex - 1], arr[currentIndex]] = [arr[currentIndex], arr[currentIndex - 1]]
currentIndex -= 1;
}
}
return arr;
}
var quickSort = function (originalArray) {
var arr = [...originalArray];
if (arr.length <= 1) return arr;
var first = arr.shift();
var left = [];
var right = [];
arr.forEach((item, index) => {
if (item <= first) {
left.push(item);
} else {
right.push(item);
}
})
return [...quickSort(left), first, ...quickSort(right)];
}
var mergeSort = function (arr) {
if (arr.length <= 1) return arr;
const middleIndex = Math.floor(arr.length / 2);
const left = arr.slice(0, middleIndex);
const right = arr.slice(middleIndex, arr.length);
const leftSorted = mergeSort(left);
const rightSorted = mergeSort(right);
return mergeSorted(leftSorted, rightSorted);
}
var mergeSorted = function (left, right) {
let sorted = [];
while (left.length && right.length) {
if (left[0] < right[0]) {
sorted.push(left.shift());
} else {
sorted.push(right.shift());
}
}
if (left.length) {
sorted = sorted.concat(left);
}
if (right.length) {
sorted = sorted.concat(right);
}
return sorted;
}
var shellSort = function (originalArray) {
var arr = [...originalArray];
let gap = Math.floor(arr.length / 2);
while (gap > 0) {
for (let i = 0; i < (arr.length - gap); i += 1) {
let current = i;
let gapShifted = i + gap;
while (current >= 0) {
if (arr[current] > arr[gapShifted]) {
[arr[current], arr[gapShifted]] = [arr[gapShifted], arr[current]];
}
gapShifted = current;
current -= gap;
}
}
gap = Math.floor(gap / 2);
}
return arr;
}
原文:https://www.cnblogs.com/whosmeya/p/12655110.html