快速排序笔记
一句话描述快排:设定一个基准,利用该基准值大小将数组分为左右两部分。此时左右两部分可以独立排序,分别对左右两部分进行上面的操作。递归处理,直至数组排序完成
function qsort(array, compareFn) {
compareFn = compareFn || function (a, b) { return a - b }
function swap(arr,i1,i2){
let tmp = arr[i1]
arr[i1] = arr[i2]
arr[i2] = tmp
}
function partition(arr, left, right){
let storeIndex = left // 其值等于表示已找到的小于基准值的元素个数
let pivot = arr[right] //基准
for(let i=left;i<right;i++){
if(comparefn(arr[i], pivot) < 0){
swap(arr,storeIndex++,i)
}
}
swap(arr,storeIndex,right)
return storeIndex
}
// 基准在左边
// function partition(arr, left, right){
// let storeIndex = left
// let pivot = arr[left] //基准
// for(let i = left+1;i<=right;i++){
// if(arr[i]<pivot){
// swap(arr,++storeIndex,i)
// }
// }
// swap(arr,storeIndex,left)
// return storeIndex
// }
function sort(arr,left,right){
if(left<right){
let storeIndex = partition(arr, left, right);
sort(arr, left, storeIndex - 1);
sort(arr, storeIndex + 1, right);
}
}
sort(array, 0, array.length - 1);
return array
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
编辑 (opens new window)
上次更新: 2023/08/30, 15:38:54