作者mantour (朱子)
看板C_and_CPP
标题Re: [问题] swap&比大小
时间Sun Mar 15 22:19:19 2009
※ 引述《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)
1F:推 Alexboo:那 i 可以改成 for(i=0;i<4;i++) 吗 03/16 15:31