看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《a1013944 (ㄚ春)》之銘言: : #include<stdio.h> : #include<stdlib.h> : #include <string> : #define Swap int(a[j],a[j+1]); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 這一行後面都沒用到,可能是多餘的,而且看起來很怪 : int main() : { : int a[5],t,i,j; : for (i=0;i<5;i++) : scanf("%d",&a[i]); : printf("排序前數字為:%d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4]); : for (i = 0 ; i < 5 ; i++) : { //////////////////////////////////////// : for ( j = 0 ; j < 4 ; j++) : { : if (a[j] > a[j+1]) : {t=a[j];a[j]=a[j+1];a[j+1]=t;}; //////////////////////////////////////// 上面括起來的部份是從左到右,二二相比,若左邊比右邊大,就交換 從左到右做完一次循環之後,就會自然的把最大的一個數換到最右邊(想想看為什麼) 同樣的步驟做第二次循環,就會保證右邊第二個一定是第二大的 重複五個循環,整個序列就會自動排好序了 By the way, 第二個for(j=0;j<4;j++) 改為for(j=0;j<4-i;j++) 可以少做一些多餘的步驟 然後如果有某一次循環中(還沒到第五次)都沒有做交換的話 那就表示整個序列已經排好序,可以直接break不用做後面的循環了 : } : } : printf("排序後數字為:%d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4]); : system("pause"); : return 0; : } : 這個是我比大小程式碼 : 我之前一直卡在 for (i = 0 ; i < 5 ; i++)以下 : 到 {t=a[j];a[j]=a[j+1];a[j+1]=t;}; : 這邊是我同學幫我改的 : 請問這邊是怎麼運作的?? : 可以解釋給我聽嗎謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.213.158 ※ 編輯: mantour 來自: 140.112.213.158 (03/15 22:21)
Alexboo:那 i 可以改成 for(i=0;i<4;i++) 嗎 03/16 15:31