排序算法 -- 选择排序

一.  选择排序

       选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

二.   原理

        n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:

        ①初始状态:无序区为R[1..n],有序区为空。
        ②第1趟排序
        在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
        ……
        ③第i趟排序
        第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
        如下图所示对数列 5 10 3 9 10  6 20 进行排序

   

三.  代码实现

#include
  
  
   
   

using namespace std;

void selectSort(int *arr, int len)
{
    if(arr == NULL || len <= 0)
    {
        return ;
    }
    for(int i=0; i
   
   
  
  

三.  时间复杂度和空间复杂度及稳定性

      1.  时间复杂度

           从代码层面上看两层for循环,从原理上看,不管原序列是否有序,对于第i个位置元素的放置,都需要遍历n-i+1个数据,寻找这些数据中最大或最小的数据,所以选择排序的时间复杂度约为O(n*n)。

      2.  空间复杂度

           无论是从代码层面上还是理论层面上看除了使用局部的临时变量外,没有额外开辟空间,所以空间复杂度为O(1)。

      3.  稳定性

           从上面的例子中可以看出两个10在拍完序后交换了顺序,从理论上讲,选择排序过程中会有间隔的数据交换,所以不稳定。

          



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值