【正确答案】
【答案解析】选择排序是一种简单直观的排序算法,它的基本原理如下:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换;接着对不包括第一个记录以外的其他记录进行第二轮比较,得到最小的记录并与第二个记录进行位置交换;重复该过程,直到进行比较的记录只有一个时为止。以数组{38,65,97,76,13,27,49)为例,具体步骤如下:
第一趟排序后:13 [65 97 76 38 27 49]
第二趟排序后:13 27 [97 76 38 65 49]
第三趟排序后:13 27 38 [76 97 65 49]
第四趟排序后:13 27 38 49[97 65 76]
第五趟排序后:13 27 38 49 65 [97 76]
第六趟排序后:13 27 38 49 65 76 [97]
最后排序结果:13 27 38 49 65 76 97
程序示例如下:
#include<stdio.h>
void SelectSort(int *a,int n)
{
int i;
int j;
int temp=0;
int flag=0;
for(i=0;i<n-1;i++)
{
temp=a[i];
flag=i;
for(j=i+1;j<n;j++)
{
if(a[j]<temp)
{
temp=a[j];
flag=j;
}
}
if(flag!=i)
{
a[flag]=a[i];
a[i]=temp;
}
}
}
int main()
{
int i=0;
int a[]={5,4,9,8,7,6,0,1,3,2};
int len=sizeof(a)/sizeof(a[0]);
SelectSort(a, len);
for(i=0; i<len; i++)
printf("%d", a[i]);
printf("/n");
return 0;
}
程序输出结果:
0 1 2 3 4 5 6 7 8 9
从简单选择排序的过程来看,它的特点就是交换移动数据次数相当少,这样也就节约了相应的时间。无论是最好情况,还是最差情况,其比较次数都是一样的,第i趟排序需要进行n-i次。而对于交换次数而言,最好的情况是有序,需要交换0次;最差的情况,即逆序时,交换次数为n-1次,基于最终的排序时间是比较与交换的次数总和,因此总的时间复杂度依然为O(n
2
)。