亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

冒泡排序的問題

冒泡排序的問題

慕粉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 關注
  • 1898 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號