- 经常会使用到的三种排序方法:冒泡排序、选择排序和快速排序
复杂度区别
冒泡、选择排序: 时间O(n²) 空间O(1)
快速排序: 时间O(nlogn) 空间O(logn)
# 冒泡排序
let bubbleSort = (array) => {
for(let i = 0; i < array.length; i++){
for(let j = i; j < array.length; j++){
if(array[i] > array[j]){
let temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
return array;
}
# 选择排序
let selectSort = (array) => {
for(let i = 0; i < array.length; i++){
let minIndex = i
for(let j = i + 1; j < array.length; j++){
if(array[j] < array[minIndex]){
minIndex = j
}
}
let temp = array[i]
array[i] = array[minIndex]
array[minIndex] = temp
}
return array
}
# 快速排序
let quickSort = (array, l, r) => {
if(l < r){
let i = l, j = r, temp = array[i]
while(i < j){
while(i < j && array[j] > temp){
j--
}
if(i < j){
array[i] = array[j]
i++
}
while(i < j && array[i] < temp){
i++
}
if(i < j){
array[j] = array[i]
j--
}
array[i] = temp
quickSort(array, l, i - 1)
quickSort(array, i + 1, r)
}
}
}
测试:
let nums = [20, 10, 9, 8, 30, 65, 70, 0, 100];
let bubble = bubbleSort(nums.slice());
let quick = nums.slice();
quickSort(quick, 0, quick.length-1);
let select = selectSort(nums.slice());
console.log(`\nnums: ${nums}`);
console.log(`\nbubble: ${bubble}`);
console.log(`\nquick: ${quick}`);
console.log(`\nselect: ${select}`);
← 柯里化(Currying) 递归的三种方式 →