问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言问题求大神详解啊

发布网友 发布时间:2023-10-19 05:20

我来回答

2个回答

热心网友 时间:2024-11-28 22:50

这个函数实现了快速排序


快速排序采用递归的方法,

每次将某个数放到合适的位置后再递归处理这个数左右的子序列,

所有的数都被放到合适的位置后排序结束。


下面来分析你给的这个函数,注意子序列在原序列中的相对位置

//a为待排序原序列
//left为原序列中的左指针,指向子序列中第1个数在原序列中的位置
//right为原序列中的右指针,指向子序列中最后1个数在原序列中的位置
void myqsort(int a[], int left, int right) 
{
int i,last;

//算出子序列中处于中间位置的数在原序列中的位置
int m=(left+right)/2;

//递归终止条件,左指针达到或超过了右指针
if (left >= right) return;

//先把子序列中处于中间位置的数和子序列最左边的数交换,作为这次待放入合适位置的数(待排序数)
swap(a,m,left);

//由于子序列中左数第1个数是待排序数,那么从左数第2个数开始扫描整个子序列
//把扫描到的小于待排序数的那些数依次和子序列中第2、第3…个位置的数进行交换
//last记录最后一个移动到前面的数所在的原序列中的新位置,它也表示了比待排序数要小的数字个数
for (i=left+1,last=left; i<=right; i++)
if (a[i]<=a[left])
swap(a,i,++last);

//由于最后一个移动到前面的数一定比待排序数要小,交换它们
swap(a,left,last);
//这个时候对于这个子序列来说
//比待排序数小的数都到了待排序数的左边
//比待排序数大的数都到了待排序数的右边

//递归排序待排序数左边的子序列
myqsort(a,left,last-1);
//递归排序待排序数右边的子序列
myqsort(a,last+1,right);
}

由于一开始指定的left和right一定是0和(a序列的长度-1),这样一来每轮排序都一定能保证有一个数被移动到整个序列中最合适的位置,通过递归反复对每个子序列进行排序后就能得到一个排序好的a序列了。

追问谢谢啦

热心网友 时间:2024-11-28 22:51

这只是一部分啊,发完整的追问#include
#define N 100
void printarray(int a[],int n)
{
int i;
for (i=0; i<n;)
{
printf("%8d",a[i++]);
if (i % 10 == 0) printf("\n");
}
}
void swap(int a[],int i,int j)
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
大同四区和市区的区别 大同云冈属于哪里 大同市云冈区建成区范围都有哪些 it wasn't long before i found a job.---before是什么意思 It wasn't long before a man from It wasn't long before和It won't be long before有什么区别吗? it wasn't long before和it won't be long before有什么不同?_百度知 ... 微信怎么查和一个好友的红包记录 马龙巴黎奥运会夺冠了吗 明天是中国的情人节??? 电脑显卡好像坏了1 同一个手机号注册了两个微信,第一登不上了怎么办? 手机号注册的怎么注销? 进常州宝马4S店工作 需要具备什么条件啊 检讨书原因字写得难看 高一政治辨析“销售收入就能盈利,增加利润就意味着经济效益提高... 微信泡泡玛特的劵支付宝小程序能用吗 自由幻想50级左右战士如何赚钱啊? 米赚咋样兑换Q币啊1 净水器不制水怎么处理 燃气锅炉负荷低耗气量高怎么办? 被封的怎么注销? 燃气锅炉耗气量大的主要原因有哪些18 注销了还能查找到吗? 电脑显示屏不亮什么原因造成的?2005 秋大白菜高产优质栽培要点 大白菜秋季栽培主要环节 一个号码注册了两个,怎么找回第一个? 怎么注销已经封了的? 什么是子数列? 爱奇艺会员看电视剧为什么看一半后面的全上锁了,这样买会员有何...1 收敛数列与其子数列间的关系从取K=N开始应该怎么理解呢? 同一手机号注册两个,前一个怎么登 男人想忘记一个女人会怎么做?如果彻底消失彻底退出那个女人得生活说明... 求北倾小说《我和你差之微毫的世界》txt百度云1986 北倾的小说《我和你差之微毫的世界》txt完整版的55 求北倾 我和你差之微毫的世界txt网盘 谢谢各位大神6 求北倾的《一线大腕》和《我和你差之微毫的世界》全文加番外,百...1 求《我和你差之微毫的世界》txt完整版4 用同一个手机号重新注册了一个,之前的微信怎么登录? 求我和你差之微毫的世界txt已完结1 我和你差之微毫的世界txt4 百沐可可膳纤饮减肥管用吗? 裤子是竖线,衣服横线这样搭配可以吗?怎么我总觉得哪里不对似的... 微波炉可以做什么美食?求推荐。6763 微波炉可以做哪些食物?420 用微波炉做的美食有那些432 百沐方真假 用微波炉可以做哪些美食?2 学生赚和米赚哪个赚快?详情3 QQ自由幻想战士赚钱