快速排序及边界问题的拙见

本文介绍了快速排序的思路和实现方法,详细讨论了在选取参照值和移动数组元素过程中的策略。对于边界问题,作者分析了不同情况下的指针关系,并提出了在不同场景下如何选择合适的参照值以避免边界问题。特别提到了在数据量小时和大时,如何选择参照值以简化边界处理。
摘要由CSDN通过智能技术生成

思路:

在当前数组中选定一个参照值x,移动数组元素使得x左边数的都小于等于x,x右边的都大于等于x,再对分出的两个小区间进行同样的操作,这样使得在每相邻两个区间里的数都有绝对的大小关系,直到最后每个区间都只剩下一个元素,排序结束。

实现:

选定参照值:

int x=q[l];

移动数组元素:

基于以下思路:
  • 使用两个指针指向数组开头的两个元素
int i=l-1,j=r+1;//这里向外移一位后面有解释
  • 将指针指向的值与x比较,满足要求则指针向中间偏移,不满足要求则指针不动
while(q[++i]<x);
while(q[--j]>y);
  • 两指针都停下之后,如果指针i在j前面就交换两指针指向的值
if(i<j)
swap(q[i],q[j]);
  • 继续比较,整合到一起就是
int x=q[l],i=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值