網域名稱俱樂部

網域名稱俱樂部 (https://www.domainclub.org/index.php)
-   一般軟體與網路使用討論 (https://www.domainclub.org/forumdisplay.php?f=43)
-   -   有關C語言的冒泡排序法一問 (https://www.domainclub.org/showthread.php?t=37455)

哈啦 2014-12-25 06:26 PM

有關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 雖然有點多此一舉,但邏輯上沒有錯誤啊,怎會結果大轉呢?~what

哈啦 2014-12-25 06:42 PM

自問自答一下:

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

yumi 2014-12-25 06:59 PM

引用:

作者: 哈啦 (文章 194705)
自問自答一下:

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

这个分析是对的
呵呵

哈啦 2014-12-25 07:03 PM

引用:

作者: yumi (文章 194706)
这个分析是对的
呵呵

十分感謝來看這題,還請有空常來指導。~yes
我目前是把相關主題都放在 http://code.club ,歡迎訪問討論 。


所有時間均為 +8。現在的時間是 06:57 AM

Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.