交换值函数
function swap(arr, a, b) {
let c = arr[a];
arr[a] = arr[b];
arr[b] = c;
}
冒泡排序
冒泡排序原理为从开始数开始,不停与下一个数比较,如果比下一个数大,则与下一个数交换位置,周而复始,直到最后一个数,这时最后一个数为数组中最大数,再次从头开始,比较 n 轮后,数组排序完成。
// 冒泡排序
function bubbleSort(arr) {
if (!arr || arr.length <= 1) {
return arr;
}
for (let i = arr.length - 1; i > 0; i--) {
for (let j = 1; j <= i; j++) {
if (arr[j] < arr[j - 1]) {
swap(arr, j, j - 1);
}
}
}
return arr;
}
选择排序
选择排序原理为假定 0 位置的数为数组中最小的数,设最小值位置为 0 ,与后面所有数进行比较,如果后面的数比 0 位置的数小,则更新最小值位置,继续往后比较,直到最后一个数,交换 0 位置和最小值位置的数,这时 0 位置的数则为数组中最小数。再从 1 位置开始继续比较,循环一轮后,数组有序。
// 选择排序
function selectSort(arr) {
if (!arr || arr.length <= 1) {
return arr;
}
for (let i = 0; i < arr.length; i++) {
let minIndex = i;
for (j = i; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
swap(arr, minIndex, i);
}
return arr
}
插入排序
插入排序原理为与前一个数比较,如果比前一个数小,则交换位置,直到大于等于前一个数,循环一轮。
// 插入排序
function insertSort(arr) {
if (!arr || arr.length <= 1) {
return arr;
}
for (let i = 1; i < arr.length; i++) {
for (let j = i; j > 0 && arr[j] < arr[j - 1]; j--) {
swap(arr, j, j - 1);
}
}
return arr
}