为了账号安全,请及时绑定邮箱和手机立即绑定

冒泡排序的问题

冒泡排序的问题

慕粉1600176492 2017-03-24 17:28:04
#include"stdio.h" #include"stdlib.h" typedef struct {   int ranking;    int  sum;       //学生的总成绩   }Student; int main() { int i,j; Student stu[7]; stu[0].sum=25;stu[1].sum=85;stu[2].sum=90;stu[3].sum=60;stu[4].sum=80;stu[5].sum=40; stu[0].ranking=1; for(i=0;i<6;i++) { if(i>0) { stu[i].ranking=stu[i-1].ranking+1; } } for(i=0;i<6;i++) { for(j=0;j<5-1;j++) { if(stu[j].sum<stu[j+1].sum) { stu[6].ranking = stu[j].ranking; stu[j].ranking = stu[j+1].ranking; stu[j+1].ranking=stu[6].ranking;   } } } for(i=0;i<6;i++) { printf("%d名的分数为%d\n",stu[i].ranking,stu[i].sum); } }输出结果不对,是不是冒泡排序出错了
查看完整描述

2 回答

?
心雨翎馨

TA贡献3条经验 获得超0个赞

循环好好看看、错了、

查看完整回答
反对 回复 2017-05-17
?
qq_愿时光安好_04050009

TA贡献2条经验 获得超0个赞

应该是

int i, j;

int n; // n代表要排序的个数

for (i = n-1; i > 0; i--) // 也可以都从i, j都从0开始 那么i就代表排序趟数

for (j = 0; j < i; j++)

{

if(arr[j] > arr[j+1])

temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

不过我觉得这么写更直观 第一次两两交换 浮出一个最大数到n-1的位置上 n-1上已有序, i-- 

如果有不同意见欢迎指正


 建立一个临时结构体, 再套里面

查看完整回答
反对 回复 2017-03-26
?
尧叔

TA贡献77条经验 获得超201个赞

//一看结果就知道你少迭代了一个,遍历的深度不够,最后一个没冒上泡。

查看完整回答
反对 回复 2017-03-24
  • 慕粉1600176492
    慕粉1600176492
    请问如何改正,平常只是用的一般的那种冒泡排序,遇到这个不会做了
  • 尧叔
    尧叔
    int length = 7 Student stu[length]; for(i=0;i<length;i++) 试试看
  • 慕粉1600176492
    慕粉1600176492
    还有一个问题就是 我这里最后一个元素stu【6】作为temp使用
点击展开后面10
?
望远

TA贡献1017条经验 获得超1032个赞

for(i=0;i<6;i++) { for(j=0;j<5-i;j++) { } }
查看完整回答
反对 回复 2017-03-24
  • 慕粉1600176492
    慕粉1600176492
    不好意思,这个地方忘改了,错把 i 写成 1 了,但是改过来以后 还是不能成功
  • 望远
    望远
    在交换ranking的同时,sum也要交换。
  • 慕粉1600176492
    慕粉1600176492
    确实,但是这里我的要求有点特殊,因为我想让这个结构体也能保存人的名次信息,如果sum也要交换的话也是不对的。
点击展开后面2
?
雪颲

TA贡献220条经验 获得超117个赞

for(j=i;j<6;j++)

查看完整回答
反对 回复 2017-03-24
  • 2 回答
  • 0 关注
  • 1754 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信