上次铃将,我們介紹了排序方法中的冒泡排序法,今天我們來介紹另一個比較重要的排序方法---選擇排序法侦厚。
選擇排序法耻陕,顧名思義就是通過選擇,比較出的大(信俾佟)值放在前面诗宣,來依次進行排序。
下面舉一個例子來說明:有{5,9,7,3}四個數想诅,要求用選擇排序法將四個數由大到小進行排序召庞。
##第一步岛心,在四個數{5,9,7,3}中找出其中的最大值9,然后將第一個數5與9進行調換篮灼。得到{9,5,7,3};
##第二步鹉梨,在{9,5穿稳,7存皂,3}中后三個數中找出其中的最大值7,然后將第2個數5與7進行調換逢艘。得到{9,7,5,3};
##第三步旦袋,在{9,7它改,5疤孕,3}中后二個數中找出其中的最大值5 ,5>3央拖,無需交換位置祭阀。得到{9,7鲜戒,5专控,3}。
##最后遏餐,得到結果:{9伦腐,7,5失都,3}柏蘑。
下面用C程序來實現(xiàn)這個問題。
分析:
由上可知粹庞,4個數一共比較3次咳焚。那么n個數一共比較n-1次。首先庞溜,用外循環(huán)控制次數;其次革半,用內循環(huán)找出剩余元素中的最大值的序號,用k來儲存序號的值;然后强缘,將剩余元素中的第一個元素與剩余元素中的最大值;最后督惰,輸出結果不傅。
程序:
#include<stdio.h>
int main()
{
int i,j,k,t;
int a[4];
printf ("please enter 4 integer numbers:\n");
for (i=0;i<4;i++)
{
scanf("%d",&a[i]);
}
for (i=0;i<3;i++)
{
k=i;
for(j=i+1;j<4;j++)
{
if (a[j]>a[k])
{
k=j;
}
}
if (k!=i)
{
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
printf ("The sorted order:\n");
for (i=0;i<4;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
結果: