排序之直接选择排序

       排序之直接选择排序

    先说一下选择排序的基本思想:每一趟从待排序的元素中选出最小的或最大的元素,顺序放在已排好序的序列最后,直到全部元素排序完毕。选择排序适用于从大量的元素中选择一部分排序元素。先介绍一下直接选择排序。

   直接选择排序的思路是:在第i趟排序开始时,当前有序区与无序区分别为a[0…i-1]和a[i…n-1](0=<i<n-1),该趟排序是从当前无序区中选出最小的元素a[k],将它与无序区的第一个元素a[i]交换,使a[0…i]和a[i+1..n-1]分别变为新的有序区和无序区,如下所示:

 第i趟排序开始前:           有序区                      无序区

                                   a[0] …….. a[i-1]          a[i] ………. a[n-1]

   一趟排序后:          a[0]………a[i-1]a[i]       a[i+1]…… ..a[n-1]

(将无序区中挑选的最小元素与a[i]交换,形成新的有序区)

所以进行n-1趟排序之后有a[0…n-2]中的所有元素均小于等于a[n-1],也就是说,经过n-1排序后,整个序列a[0…n-1]递增有序。

    直接选择排序每趟排序产生的有序区一定是全局有序区,也就是说每趟产生的有序区中所有元素都归位了。直接插入排序属于就地排序,平均时间复杂度为O(n^2),下面给出可行的代码,个别解释在代码中给出,直接选择排序比较容易理解和实现,注意区分元素下标与排序趟数。

 voidSort_Select(int *a ,int n)
{
  inti,j,MinIndex;
 for(i=0; i<n-1; i++)//进行n-1趟排序
{
  MinIndex = i;
  for(j = i+1; j<n; j++)
   {
      if (a[j] < a[MinIndex])
         MinIndex = j;
}
Swap(a[i], a[MinIndex]);
}
 
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值