選擇排序每一趟都要找到該趟比較的數中最小的那個數。
關鍵(假設十個數為9 8 7 4 5 6 1 2 3 0):
for (i=0;i<9;i++) //以下以第一趟為例,十個數要循環九趟
{
min=i; //假設i=0為最小數,即a[min]=9
for(j=i+1;j<10;j++) //從第二個數開始和第一個數比較
{ //j=1,a[j]=8
if(a[min]>a[j]) //因為9>8
{
min=j; //所以min=1,a[min]=8,此時j=1<10,所以j++,即j=2,a[j]=7
} //然后又將新的a[min]和新的a[j]比
} //以此類推,當第二個for循環第一次結束時就找到了第一輪中的最小值
if(min!=i) //并通過if語句將每一輪找到的最小值按順序排好
{ //并且如果剛好定義的最小值是我們要找的該輪最小值,
t=a[min]; //那么就不進行交換,如果不是,則交換
a[min]=a[i];
a[i]=t;
}
}
完整代碼:
#include<stdio.h>
int main()
{
int i,j,t,min,a[10];
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<9;i++)
{
min=i;
for(j=i+1;j<10;j++)
{
if(a[min]>a[j])
{
min=j;
}
}
if(min!=i)
{
t=a[min];
a[min]=a[i]; // 此處要十分注意,a[min]是和a[i]交換位置而不是和a[j]交換位置
a[i]=t; //這樣才能讓每一輪的最小按順序排好
} //好要注意應該在選出每一輪最小值后再進行交換
}
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}