排序算法 -- 选择排序

来源:互联网 发布:淘宝店装饰教程 编辑:程序博客网 时间:2024/06/07 21:24

一.  选择排序

       选择排序(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 进行排序

   

三.  代码实现

#includeusing 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在拍完序后交换了顺序,从理论上讲,选择排序过程中会有间隔的数据交换,所以不稳定。

          



原创粉丝点击