排序算法-选择排序

算法描述

第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕

实现代码

int main()
{
    int a[10] = {3,2,1,6,5,4,7,8,9,0};
    int i,j,k;
    int key;
    for(i = 0; i < 9; i++) //扫描n-1次就行
    {
        key = a[i];   //记录当前要插入的位置上的数
        for(j = i + 1; j < 10; j++)
        {
            if(key > a[j])
            {
                key = a[j]; //最小值赋值给key
                k = j;  // 记录未排序序列每次扫描最小值的下标
            }
        }
        a[k] = a[i];  //把未排序序列的最小值安插在已排序序列的最后面
        a[i] = key;

        for(k = 0; k < 10; k++) //打印排序过程
        {
            cout << a[k] << " ";
        }
        cout << endl;
    }
    return 0;
}

运行结果

算法分析

复杂度

在直接选择排序中,共需要进行n-1次选择和交换,每次选择需要进行 n-i 次比较 (1<=i<=n-1),而每次交换最多需要3次移动,因此,总的比较次数C=1/2(n*(n - 1)), 总的移动次数 3(n-1).由此可知,直接选择排序的时间复杂度 为 O(n2) (n的平方)

稳定性

在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么 交换后稳定性就被破坏了。举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。由于在直接选择排序中存在着不相邻元素之间的互换,因此,直接选择排序是一种不稳定的排序方法。

转载于:https://my.oschina.net/u/188860/blog/360550

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值