有關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 |
自問自答一下:
邏輯上果然有錯,因為在x[0]這一輪時,假設x[0]>x[1]因而把值調換過來,此時x[0]<x[1]。然後到第二輪x[1]時,再拿 x[1]又去比一次 x[0](因為y一直都是從0開始),結果x[1]的值一定大於x[0](因為上一輪才調換過),所以等於又把大的值換給x[0]了。然後一路換下去,就等於最大的排最前面,和原來的本意相反了。 |
引用:
呵呵 |
|
所有時間均為 +8。現在的時間是 06:57 AM。 |
Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.