冒泡排序
// 其实还是很好理解的, 第一个循环代表需要比较多少轮, 自然是 array.length - 1
// 第二个循环就是真正的遍历数组去比较, 应该需要 array.length - 1 - i(每轮都可以少循环一次)
const bubbleSort = function(array) {
let flag = true
for (let i = 0; (i < array.length - 1) && flag; i++) {
flag = false
for (let j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
// 交换位次
let temp = array[j]
array[j] = array[j+1]
array[j+1] = temp
flag = true
}
}
}
};
快速排序
function quickSort(arr){
if(arr.length<=1) return arr
const middle = arr.splice(0, 1)[0];
const left = [];
const right = [];
for(let i=0; i<arr.length; i++){
if(arr[i] <= middle){
left.push(arr[i])
} else {
right.push(arr[i])
}
}
return [...quickSort(left), middle, ...quickSort(right)]
}
选择排序
function selectionSort(arr) {
let indexMin = null
// 排序 length - 1 轮
for (let i = 0; i < arr.length - 1; i++) {
indexMin = i
// 前后比较(j = i + 1)
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[indexMin]) {
indexMin = j
}
}
if (indexMin !== i) {
let temp = arr[i]
arr[i] = arr[indexMin]
arr[indexMin] = temp
}
}
}