Re: [問題] swap&比大小
※ 引述《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)
推
03/16 15:31, , 1F
03/16 15:31, 1F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章