網域名稱俱樂部


返回   網域名稱俱樂部 > 電腦與網路技術 > 電腦網路相關技術 > 一般軟體與網路使用討論
論壇幫助 社區 日曆事件 今日新文章 搜尋

回覆
 
主題工具
  #1  
舊 2014-12-25, 06:26 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,056
預設 有關C語言的冒泡排序法一問

冒泡排序法的程式如止:
# include "stdio.h"
main(){
int i,j,a[5],temp;
for(i=0;i<5;i++)
scanf("%d,",&a[i]);
for(i=0;i<5;i++)
for(j=i+1;j<5;j++)
if(a[i]>a[j])
{temp=a[i];
a[i]=a[j];
a[j]=temp;}
for(i=0;i<5;i++)
printf("%d",a[i]);
printf("\n");
}

紅字的部份我能理解,但如果我將它換成 j=0,結果排序的結果竟然顛倒過來,變成由大往小排序?我想了半天,換成 j=0 雖然有點多此一舉,但邏輯上沒有錯誤啊,怎會結果大轉呢?
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #2  
舊 2014-12-25, 06:42 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,056
預設

自問自答一下:

邏輯上果然有錯,因為在x[0]這一輪時,假設x[0]>x[1]因而把值調換過來,此時x[0]<x[1]。然後到第二輪x[1]時,再拿 x[1]又去比一次 x[0](因為y一直都是從0開始),結果x[1]的值一定大於x[0](因為上一輪才調換過),所以等於又把大的值換給x[0]了。然後一路換下去,就等於最大的排最前面,和原來的本意相反了。
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #3  
舊 2014-12-25, 06:59 PM
yumi yumi 目前離線
進階會員
 
註冊日期: 2005-12-29
文章: 1,373
預設

引用:
作者: 哈啦 查看文章
自問自答一下:

邏輯上果然有錯,因為在x[0]這一輪時,假設x[0]>x[1]因而把值調換過來,此時x[0]<x[1]。然後到第二輪x[1]時,再拿 x[1]又去比一次 x[0](因為y一直都是從0開始),結果x[1]的值一定大於x[0](因為上一輪才調換過),所以等於又把大的值換給x[0]了。然後一路換下去,就等於最大的排最前面,和原來的本意相反了。
这个分析是对的
呵呵
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。
回覆時引用此篇文章
  #4  
舊 2014-12-25, 07:03 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,056
預設

引用:
作者: yumi 查看文章
这个分析是对的
呵呵
十分感謝來看這題,還請有空常來指導。
我目前是把相關主題都放在 http://code.club ,歡迎訪問討論 。
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
回覆


發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼



所有時間均為 +8。現在的時間是 09:57 PM


本站主機由網易虛擬主機代管
Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.