快速排序
- 以中间项为基准base
- 遍历数组,小于基准的放在smaller,大于基准的放在bigger
- 递归调用
时间复杂度:最坏O(n^2) 平均O(n*logn)
function quicksort(arr) {
if (arr.length <= 1) {
return arr
}
let smaller = [];
let bigger = [];
let base = arr[0];
for (i = 1; i < arr.length; i++) {
if (arr[i] < base) {
smaller.push(arr[i]);
}
else {
bigger.push(arr[i]);
}
}
return quicksort(smaller).concat([base], quicksort(bigger));
}
console.table(quicksort([2142,241,1,2,45,0,7,2]));
选择排序
选择排序是一个简单直观的排序方法,它的工作原理很简单,首先从未排序数组中找到最大的元素,放到已排序数组的末尾,重复上述步骤,直到所有元素排序完毕。
时间复杂度:O(n^2)
function selectionSort(arr) {
let index,temp;
for (let i = 0; i < arr.length; i++) {
index = i;
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[index]) {
index = j;
}
}
temp = arr[[i]];
arr[i] = arr[index];
arr[index] = temp;
}
return arr;
}
console.log(selectionSort([2142,241,1,2,45,0,7,2]));
冒泡排序
比较相邻的两个元素,如果前一个比后一个大,则将它们交换位置,第一次比较完时,最后一个元素最大,不需要继续比较,重复地进行直到没有相邻元素需要交换。
时间复杂度:O(n^2)
function bubbleSort(arr){
for(let i=0;i<arr.length;i++){
for(let j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
[arr[j],arr[j+1]]=[arr[j+1],arr[j]];
}
}
}
return arr;
}
console.table(bubbleSort([2142,241,1,2,45,0,7,2]));