快速排序算法-JavaScript版

原理

比如有一个这样的数组

1
let arr1 = [4, 3, 1, 5, 2, 6, 5, 3, 8, 9, 6, 7];

从数组中找一个基准数,通常为第一个元素,比如 4,然后把数组中的所有大于基准数的都放到右边,小于的都放到左边。

第一轮结束后,虽然左边都是小于基准数的,右边都是大于基准数的,但是他们仍是乱序的,所以需要把两边的继续做上面的交换。

实现方式

根据上面的原理有什么好的方式较快的实现呢,总不能一个一个从头循环来做吧,那和冒泡区别就不大了。

从数组的两端进行探测,如果发现左边的大于基准数,则和右边的小于基准数的进行互换。
注意:要先从右开始探测。

code

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
let arr1 = [4, 3, 1, 5, 2, 6, 5, 3, 8, 9, 6, 7];
let len = arr1.length - 1;
function quickSort(arr, left, right) {
let l = left;
let r = right;
let base = arr[left];
if (left > right) {
return;
}

while (l != r) {
while (arr[r] >= base && l < r) {
r--;
}

while (arr[l] <= base && l < r) {
l++;
}

if (l < r) {
let tmp = arr[l];
arr[l] = arr[r];
arr[r] = tmp;
}
}
arr[left] = arr[l];
arr[l] = base;

quickSort(arr, left, l - 1);
quickSort(arr, l + 1, right);
}

quickSort(arr1, 0, len);
console.log(arr1.toString());
文章作者: wenmu
文章链接: http://blog.wangpengpeng.site/2020/02/28/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95-JavaScript%E7%89%88/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 温木的博客
微信打赏