简单选择排序

本文深入探讨了简单选择排序的基本思想、关键字比较次数、记录移动次数及算法的时间复杂度和稳定性。并通过代码实例展示了简单选择排序的实现过程。

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


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值