- 冒泡排序
思路:从第一项开始,与它后面的每一项进行比较,如果大于后面的项,则交换位置。
let arr = [12, 8, 24, 16, 1];
function bubbleSort(arr) {
let temp = null
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j <= arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
return arr;
}
arr = bubbleSort(arr)
console.log(arr);
- 插入排序
思路:取出数组的第一项放到新数组里,让剩余的每一项与新数组的每一项进行比较,小的放左边,大的放右边。(类似于拿牌)
let arr = [12, 8, 24, 16, 1];
function insertSort(arr) {
let res = []
res.push(arr[0])
for (let i = 1; i < arr.length; i++) {
let A = arr[i]
for (let j = res.length - 1; j >= 0; j--) {
let B = res[j]
if (A > B) {
res.splice(j + 1, 0, A);
break;
}
if (j === 0) {
res.unshift(A)
}
}
}
return res
}
arr = insertSort(arr);
console.log(arr);
- 快速排序
思路:取出数组中间项,把小于中间项的放左边数组,大于中间项的放右边数组,再把左边和右边数组递归,连接左边+中间值+右边,得到最终结果。
let arr = [12, 8, 24, 16, 1];
function quickSort(arr) {
if (arr.length <= 0) {
return arr
}
let middleIndex = Math.floor(arr.length / 2)
let middleValue = arr.splice(middleIndex, 1)[0]
let leftArr = [],
rightArr = []
for (let i = 0; i < arr.length; i++) {
arr[i] < middleValue ? leftArr.push(arr[i]) : rightArr.push(arr[i])
}
return quickSort(leftArr).concat(middleValue, quickSort(rightArr))
}
arr = quickSort(arr);
console.log(arr);