永发信息网

c++ problem

答案:3  悬赏:50  手机版
解决时间 2021-07-29 11:11

急!!请教高人,这个简单排序的子程序为什么无法正确输出每趟排序结果?

非常感谢!!!

void SelectSort(SqList R)
{ int i,j,k,y;
printf("简单选择排序法 每趟结果:\n");
for(i=1;i<8;i++)
{ //做第i趟排序(1≤i≤n-1)
k=i;
for(j=i+1;j<=8;j++)//在R[i..n]中选key最小的记录R[k]
if(R.r[j].key<R.r[k].key)
k=j; //k记下目前找到的最小关键字所在的位置
if(k!=i) //交换R[i]和R[k]
{ R.r[0]=R.r[i]; R.r[i]=R.r[k];R.r[k]=R.r[0]; } //R[0]作暂存单元

for(y=1;y<=R.length;y++)
printf("%d ",R.r[y].key);
printf("\n");

}
}

最佳答案
看起来没错,你的SqList是个什么结构?
输出的是R.r[y].key为什么交换的是R.r[y]呢

内层循环的for的循环体你忘了用大括号括起来- -

另外,你每次都是在上次排好的数组上面排序,如果排序策略不一样(升序还是降序),每次输出肯定是一样的,你改成这样就能看输出:

void SelectSort(SqList R)
{ int i,j,k,z;
printf("简单选择排序法 每趟结果:\n");
for(i=1;i<8;i++)
{ //做第i趟排序(1≤i≤n-1)
k=i;
for(j=i+1;j<=8;j++) {//在R[i..n]中选key最小的记录R[k]
if(R.r[j].key>R.r[k].key) // 改用升序排序
k=j; //k记下目前找到的最小关键字所在的位置
if(k!=i) //交换R[i]和R[k]
{ R.r[0]=R.r[i]; R.r[i]=R.r[k];R.r[k]=R.r[0]; } //R[0]作暂存单元
}
for(z=1;z<=R.length;z++)
printf("%d ",R.r[z].key);
printf("\n");
}
}
全部回答
你的显示函数怎么嵌套在循环里了? 是故意要这么做的吗? 逻辑上是没什么错了 建议你把全部代码贴上来给我们看看

这个选择排序的逻辑貌似没错啊,每次都选择未排序内容中的最小值放到第i位上。你把输出的结果贴一下吧

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么win7正式版玩穿越火线不能全屏?
上哪买NBA2K10中文正版盘?
为什么有时觉得正在做的事情好像以前在哪做过
我的校友为什么注册不了呢
列四副地图中,比例尺最小的是A世界政区图B亚
远安县宜昌方向盘地址在哪,我要去那里
2K10怎么空接
谁能给点建议,蓝才1万2多,怎么提蓝上限呢?
英特尔 Pentium(奔腾) D 2.80GHz 与AMD AM2 A
电饭煲刮花了会黏饭有什么办法
十字绣要用什么面料绣比较好呢?
某市自来水价格如下表.已知5月份小明家和小东
如果早知道这样的结果,你会不会后悔?
郊区佳木斯黑龙江省农村信用社24小时自助银行
孩子的体温要用体温计量,很麻烦,有没有什么
推荐资讯
冯小刚超生罚了多少钱,超生罚款怎么办
仙剑3外传下载地址
怎样才能是自己客源多一点 婚纱摄影
今年二十了,我的两个大门牙缝隙太大,还能戴
qq问怎么点亮图标
大学毕业最先要考虑的是什么?
生鼻炎不去治会怎么样
我的校友资料中的年龄有误。请问如何更改?
珠晖区广东箭牌卫浴衡阳旗舰店地址在哪里啊
空间的个人中心只显示投票 转载日志不显示了
我手机游戏满江红版本怎么发短信都要失败呢。
中国石油、14.36买入现该如何操作、谢谢。
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?