选择法排序指每次选择所要排序的数组中的最小(最大)的数组元素,将这个数组元素的值与后面没有进行排序的数组元素的值互换。
下面以9、6、15、4、2为例,进行选择排序
元素[0] | 元素[1] | 元素[2] | 元素[3] | 元素[4] | |
起始值 | 9 | 6 | 15 | 4 | 2 |
第一次 | 2 | 6 | 15 | 4 | 9 |
第二次 | 2 | 4 | 15 | 6 | 9 |
第三次 | 2 | 4 | 6 | 15 | 9 |
第四次 | 2 | 4 | 6 | 9 | 15 |
结果 | 2 | 4 | 6 | 9 | 15 |
可以发现,有n个数进行选择法排序时,需要执行n(n-1)/2次比较,n-1次交换
下面通过程序来实现(10个元素从小到大排序)
#include<stdio.h>
int main()
{
int arr[10]; /*定义一个10个元素的数组*/
int i,j,temp,pos; /*temp记录最小值,pos记录最小值位置*/
for(i=0;i<=9;i++) /*输入各个数字*/
{
scanf("%d",&arr[i]);
}
for(i=0;i<9;i++) /*10个数排序,则只需执行9次*/
{
temp=arr[i]; /*记录此时的值为最小值*/
pos=i; /*记录该元素的位置*/
for(j=i+1;j<10;j++) /*与后面的元素逐个比较*/
{
if(arr[j]<temp) /*若temp中的数大于下一位,则temp赋值为下一位*/
{
temp=arr[j];
pos=j;
}
}
arr[pos]=arr[i]; /*交换两个元素的值*/
arr[i]=temp;
}
for(i=0;i<=9;i++) /*输出排序后的数组*/
{
printf("%d ",arr[i]);
}
return 0;
}
由此可以得出选择法排序简单容易实现,适用于数量较少的排序