直接选择排序

排序思想

     选择排序: 每次从当前待排序的记录中选取关键字最小的记录表,然后与待排序的记录序列中的第一个记录进行交换,直到整个记录序列有序为止。

     直接选择排序,也叫简单选择排序。

     基本操作:通过n-i次关键字间的比较,从n-i+1个记录中选取关键字最小的记录,然后和第i个记录进行交换,i=1, 2, … n-1 。

排序示例

设有关键字序列为:7, 4, -2, 19, 13, 6,直接选择排序的过程如下图1所示。

算法实现

void simple_selection_sort(int value[], int length)
{
    int i, j, k;
    int tmp = 0;
    for(i=0; i<length; i++)
    {
        k = i;
        for(j=i+1; j<length; j++)
            if(value[j] < value[k])
                k = j;
        if(k != i)      /*   记录交换   */
        {
            tmp = value[i];
            value[i] = value[k];
            value[k] = tmp;
        }
    }
}

算法分析

整个算法是二重循环:外循环控制排序的趟数,对n个记录进行排序的趟数为n-1趟;内循环控制每一趟的排序。
    进行第i趟排序时,关键字的比较次数为n-i,则:

比较次数:

∴  时间复杂度是:T(n)=O(n2)
    空间复杂度是:S(n)=O(1)
      从排序的稳定性来看,直接选择排序是不稳定的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值