现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

简单选择排序

2012-08-23 21:27 工业·编程 ⁄ 共 634字 ⁄ 字号 暂无评论

   简单选择排序的基本思想:第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。共需进行i-1趟比较,直到所有记录排序完成为止。例如:进行第i趟选择时,从当前候选记录中选出关键字最小的k号记录,并和第i个记录进行交换。
实现代码如下:

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]);
    }
}

(1)关键字比较次数
    无论文件初始状态如何,在第i趟排序中选出最小关键字的记录,需做n-i次比较,因此,总的比较次数为:
     n(n-1)/2=0(n2)
(2)记录的移动次数
    当初始文件为正序时,移动次数为0
    文件初态为反序时,每趟排序均要执行交换操作,总的移动次数取最大值3(n-1)。
    直接选择排序的平均时间复杂度为O(n2)。
(3)直接选择排序是一个就地排序
(4)稳定性分析

【上篇】
【下篇】

给我留言

留言无头像?