[問題] 冒泡排序的問題

看板C_and_CPP作者 (小天)時間9年前 (2014/09/08 20:57), 編輯推噓1(1010)
留言11則, 3人參與, 最新討論串1/1
void bubblesort(int k[],int n) { bool flag=1; int count1=0, count2 = 0; for(int i=0; i<n-1 && flag ; i++){ flag = 0; for(int j=1; j<n-i; j++){ //for(int j=n-1; j>i; j--){//問題在這 count1++; if(k[j-1]> k[j]){ count2 ++; flag =1; swap(&k[j-1],&k[j]); } } } cout << count1 << ' ' << count2 << endl; } 我比較了兩個for(一個從低到高,一個從高到低) 發現效率是不同的(效果依樣,也就是count2一樣,可是count1卻不同) 我想不透是為什麼,想請各位解惑... (這邊flag是為了如果整串搜尋都沒有交換的話就提早結束的flag) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.25.105 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1410181070.A.EA3.html

09/08 21:08, , 1F
你想想 flag 的意義. 拿掉 count1 會一樣嗎?
09/08 21:08, 1F

09/08 21:11, , 2F
至於 count2 為什麼一樣就想想交換鄰居對於順序的影響
09/08 21:11, 2F

09/08 21:13, , 3F
不管哪種 for , 元素都只會往他應該在的順位透過交換移動
09/08 21:13, 3F

09/08 21:17, , 4F
flag初值設1,進入迴圈馬上被洗掉
09/08 21:17, 4F

09/08 21:17, , 5F
我眼殘@@
09/08 21:17, 5F

09/08 21:36, , 6F
F大: 我知道flag拿掉會不一樣,也知道count2一樣
09/08 21:36, 6F

09/08 21:38, , 7F
想知道的是為什麼for從低和從高count1的效率會不一樣呢?
09/08 21:38, 7F

09/08 21:50, , 8F
所以你不懂兩個 for 的 flag 不同?
09/08 21:50, 8F

09/08 21:52, , 9F
flag 為0沒有需要交換的…順序不同 flag 變成 0 的回合數不
09/08 21:52, 9F

09/08 21:54, , 10F
這是邏輯問題…估計會被砍文章XD
09/08 21:54, 10F

09/08 21:56, , 11F
想一下 5 1 2 3 4 在兩種 for 的差異… count1 各是多少?
09/08 21:56, 11F
文章代碼(AID): #1K3QVEwZ (C_and_CPP)