快排是一种常用的排序算法,它的基本步骤如下:
- 选择基准
- 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。
- 递归地对两个子序列进行快速排序,直到序列为空或者只有一个元素为止。
在简单的伪代码中,此算法可简单地表示为:
1 | function quicksort(q) |
参考以上伪代码,js可以这么实现快排:
1 | var quicksort = function(arr) { |
运行此示例:
但是很显然,这种方法比较浪费存储空间,所以就有人提出了原地分区(in-place partition),伪代码如下:
1 | function partition(a, left, right, pivotIndex) |
有了以上分区算法,就可以这么写快排:
1 | procedure quicksort(a, left, right) |
这种方式下,js可以这么实现快排:
1 | // 交换 |
运行此示例: