快速排序正如它的名字一样,排序很快,是处理大数据最快的排序算法之一了。
时间复杂度为O(nlogn)
快速排序思路讲解
快速排序是利用分治法的思想,大概来说主要分为三步
- 确定基数作为基准值
- 将比基数小的值放在左边,比基数大的值放在左边
- 递归重复上面的两个步骤
步骤一和步骤三都很好实现,那么步骤二是如何实现的呢?
比如现在要排序如下的数组,我们首先确定基数为4,并且两个指针H和E分别指向数组的头部和尾部
然后先比较E和基数,如果E小于基数,就停止移动,然后把E赋值给H,然后H向前移动然后再比较基数和H,一但H大于基数,H就停止移动,并把H的值赋值给E
接下来又开始移动E,前面没有小于基数的值了,所以最终E会移动到和H重合的位置。一旦发现H和E重合,就把基数赋值给重合的位置
到这里一次分治就完成了,接下来利用递归循环即可
具体实现代码如下
function quick(arr) {
sort(arr, 0, arr.length - 1);
return arr
function sort(arr, low, hight) {
if (low >= hight) {
return;
}
let i = low
let j = hight
// 比较值x
const x = arr[i]
while (i < j) {
// 尾部找比x小的数
while (arr[j] >= x && i < j) {
j--;
}
if (i < j) {
arr[i] = arr[j]
i++;
}
//头部找比x小的数
while (arr[i] <= x && i < j) {
i++;
}
if (i < j) {
arr[j] = arr[i]
j--;
}
}
arr[i] = x
sort(arr, low, i - 1)
sort(arr,i + 1, hight)
}
}
quick([1, 5, 4, 8, 2]);