排序方法之选择排序法
上次,我们介绍了排序方法中的冒泡排序法,今天我们来介绍另一个比较重要的排序方法---选择排序法。
选择排序法,顾名思义就是通过选择,比较出的大(小)值放在前面,来依次进行排序。
下面举一个例子来说明:有{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程序来实现这个问题。
分析:
由上可知,4个数一共比较3次。那么n个数一共比较n-1次。首先,用外循环控制次数;其次,用内循环找出剩余元素中的最大值的序号,用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;
}
结果:
