快速排序算法学习心得(Java实现)

本文分享了快速排序算法的学习心得,通过Java代码详细解析排序过程,包括分区操作和递归调用。通过实例分析,帮助理解该算法的高效性和工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上代码:

​int AdjustArray(int s[], int l, int r) //返回调整后基准数的位置,传入的参数分别是:子数组,子数组的第一个数的下标,最后一个数的下标
{
int i = l, j = r;
int x = s[l]; //s[l]即s[i]就是第一个坑
while (i < j)
{
// 从右向左找小于x的数来填s[i]
while(i < j && s[j] >= x) //不要以为这个地方的i<j和上面的while循环里面的条件相重复了,因为while循环反复判断括号里面的条件,反复在执行j--;说不定什么时候j减到小于i了也不一定啊。
j--;  
if(i < j) 
{
s[i] = s[j]; //将s[j]填到s[i]中,s[j]就形成了一个新的坑
i++;
}

// 从左向右找大于或等于x的数来填s[j]
while(i < j && s[i] < x)
i++;  
if(i < j) 
{
s[j] = s[i]; //将s[i]填到s[j]中,s[i]就形成了一个新的坑
j--;
}
}
//退出时,i等于j。将x填到这个坑中。
s[i] = x;

return i;
}
//这个函数的核心就是在一个子数组里面(可能是左边的,也可能是右边的)得出基准元素最终的下标,进行下一步的迭代。思想是一第一个数为基准元素,将其保存在x里面,形成一个坑,从后往前找比基准元素小的填这个坑,新形成的坑怎么办呢,从前往后找比基准元素大的填坑,(这样做的目的是前面的元素肯定是比x小的,后面的元素肯定是比x大的)这样不断地进行,直到i=j为止,此时最后的坑由x去填,即最初的基准元素。

void quick_sort1(int s[], int l, int r)
{
if (l < r)
   {
int i = AdjustArray(s, l, r);//先成挖坑填数法调整s[]
quick_sort1(s, l, i - 1); // 递归调用 
quick_sort1(s, i + 1, r);
}
}
adjustArray函数返回了一个值,这个值记录了一次排序后基准元素的下标,记为i,则i+1是子数组的最左边的元素(这个数组所有的元素都比这个基准元素大),i-1是子数组的最右端(这个数组所有的元素都比这个基本数组小)。递归之后就得到排好的顺序了。




参考博客:http://blog.youkuaiyun.com/morewindows/article/details/6684558

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值