单选题 对一组数据(84,47,25,15,21)排序,数据的排列次序在排序的过程中的变化为 ____
(1)84 47 25 15 21 (2)1 5 47 25 84 21
(3)15 21 25 84 47 (4)1 5 21 25 47 84
则采用的排序是 ____
【正确答案】 A
【答案解析】简单选择排序的基本思想是:每一趟在n-i+1(i=1,2,3,…,n-1)个记录中选取关键字最小的记录作为有序序列中的第i个记录。它的具体实现过程为:
(1)将整个记录序列划分为有序区域和无序区域,有序区域位于最左端,无序区域位于右端,初始状态有序区域为空,无序区域含有待排序的所有n个记录。
(2)设置一个整型变量index,用于记录在一趟的比较过程中,当前关键字值最小的记录位置。开始将它设定为当前无序区域的第一个位置,即假设这个位置的关键字最小,然后用它与无序区域中其他记录进行比较,若发现有比它的关键字还小的记录,就将index改为这个新的最小记录位置,随后再用a[index].key与后面的记录进行比较,并根据比较结果,随时修改index的值,一趟结束后index中保留的就是本趟选择的关键字最小的记录位置。
(3)将index位置的记录交换到无序区域的第一个位置,使得有序区域扩展了一个记录,而无序区域减少了一个记录。
不断重复(2)、(3),直到无序区域剩下一个记录为止。此时所有的记录已经按关键字从小到大的顺序排列就位。
算法如下:
void selecsort(DataType a,int n)
{
for(i=1;i<n;i++) ∥对n个记录进行n-1趟的简单选择排序
index=i; ∥初始化第i趟简单选择排序的最小记录指针
for(j=i+1;j<=n;j++)∥搜索关键字最小的记录位置
if(a[j].key<a[i].key)index=j;
if(index!=i)
{temp=a[i];a[i]=a[index];a[index]=temp;}
}
}
简单选择排序算法简单,但是速度较慢,并且是一种不稳定的排序方法,但在排序过程中只需要一个用来交换记录的暂存单元。其时间复杂度为O(n 2 )。
举例:利用简单选择排序算法对以下序列排序:
(72,73,71,23,94,16,5,68)
过程: 第一趟:5,73,71,23,94,16,72,68
第二趟:5,16,71,23,94,73,72,68
第三趟:5,16,23,71,94,73,72,68
第四趟:5,16,23,68,94,73,72,71
第五趟:5,16,23,68,71,73,72,94
第六趟:5,16,23,68,71,72,73,94
第七趟:5,16,23,68,71,72,73,94完成