1、简单选择排序的基本思想:
第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。共需进行i-1趟比较,直到所有记录排序完成为止。
例如:进行第i趟选择时,从当前候选记录中选出关键字最小的k号记录,并和第i个记录进行交换。
2、关键字比较次数:
无论文件初始状态如何,在第i趟排序中选出最小关键字的记录,需做n-i次比较,因此,总的比较次数为:n(n-1)/2=0(n2)。
3、记录的移动次数:
当初始文件为正序时,移动次数为0。文件初态为反序时,每趟排序均要执行交换操作,总的移动次数取最大值3(n-1)。
4、直接选择排序的平均时间复杂度为O(n2)。直接选择排序是一个就地排序。
5、稳定性分析:
直接选择排序是不稳定的。反例[2,2,1]。
6、实现代码如下:
void SelectSort(int array[] , int length) // 简单选择排序
{
int i , j , k;
for(i = 0 ; i < length-1 ; ++i)
{
k = i;
for(j = i + 1 ; j < length ; ++j) // 从后面选择一个最小的记录
{
if(array[j] < array[k])
k = j;
}
if(k != i) // 与第i个记录交换
swap(array[i] , array[k]);
}
}
本文深入探讨了简单选择排序的基本思想、关键字比较次数、记录移动次数及算法的时间复杂度和稳定性。并通过代码实例展示了简单选择排序的实现过程。
812

被折叠的 条评论
为什么被折叠?



