基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换,然后在剩下的数当中再找最小数与第二个位置的数交换,如此循环到倒数第二个数和最后一个数为止。
#include <stdio.h>
#define N 5
#define swap(a,b) a=a+b,b=a-b,a=a-b
int main(void)
{
int a[N],i,j;
for(i=0; i<N; i++)
scanf("%d",a+i);
for(i=0; i<N-1; i++)
for(j=i+1; j<N; j++)
if(a[i]>a[j]) //本轮中找到比最左边的数更小的数则交换
swap(a[i],a[j]);
for(i=0; i<N; i++))
printf("%d ", i);
printf("\n");
return 0;
}
以上方法的另一种写法,其思路是一致的。
#include <stdio.h>
#define N 5
#define swap(a,b) a=a+b,b=a-b,a=a-b
int main(void)
{
int a[N],h,i,j;
for(i=0; i<N; i++)
scanf("%d",a+i);
for(i=0; i<N-1; i++)
{
for(h=i,j=i+1; j<N; j++)
if(a[h]>a[j]) h=j; //数组中找到比a[h]更小的数则h记录此数的下标
if(h!=i) //若h记录了更小的数且最小的数,则交换
swap(a[h],a[i]);
}
for(i=0; i<N; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}