一、快速排序的核心思想

快速排序是一种高效的分治排序算法,其核心思想是分而治之

1.选择基准值:从数组中挑选一个元素作为基准,一般挑选第一个元素为基准值

2.分区:将数组中所有小于基准的元素移到基准左边,大于基准的元素移到基准右边

3.递归排序:递归地对基准左边和右边的子数组进行排序,直到整个数组有序

它的平均时间复杂度O(nlogn),在多数情况下表现优异,且是数学理论中最快的基于比大小的排序算法

二、双指针法实现快速排序

下面我将带读者走一遍如何编写快速排序

1.快速排序算法执行流程解析:

我们以数组[3,1,4,2,5]为例,详细说明排序过程:

1.初始调用:  arr=[3,1,4,2,5],left(左指针)=0,right(右指针)=4,jizhun(基准值)=3,i=left=0,j=right=4

2.右指针向左移动:arr[4]=5>3 -->右指针减一(向左边移动一个)j=3,继续比较:arr[3]=2<3

-->左指针指向的数字替换成当前右指针指向的数字,将arr[0]=arr[3]=2,此时数组为[2,1,4,2,5]

3.左指针向右移动:左指针加一(向右移动一个)i=1,继续比较:arr[1]=1<3-->左指针加一(向右移动一个)i=2,继续比较:arr[2]=4>3-->右指针指向的数字替换成当前左指针指向的数字,将arr[3]=arr[2]=4,然后右指针减一,j=2,数组为[2,1,4,4,5]

4.基准值归为:  此时i=j=2,将基准值3放入arr[2],数组变为[2,1,3,4,5]

5.递归排序:此时数组被基准值3分为了两部分,左边都是小于3的数字,右边都是大于3的数字,对左子数组[2,1]和右子数组[4,5]重复上述过程,最终得到有序数组[1,2,3,4,5]

三、完整代码实现

四、总结

快速排序凭借其高效的平均性能,成为了排序算法中的 “明星”。通过双指针法实现分区操作,我们可以清晰地看到元素如何围绕基准值进行重排。理解其分治的思想,不仅能帮助我们写出更好的代码,也能为学习其他分治算法打下坚实基础。

 

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐