zoukankan      html  css  js  c++  java
  • (5)排序之简单选择排序

    转载:http://www.cnblogs.com/jingmoxukong/p/4303289.html

    要点

    简单选择排序是一种选择排序

    选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。

     

    简单排序处理流程

    (1)从待排序序列中,找到关键字最小的元素;

    (2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;

    (3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。

    如图所示,每趟排序中,将当前 i 小的元素放在位置上。 

     

    核心代码

    void selectionSort(int *a,int n){
        //需要遍历最小值获得的次数
        //要注意一点,当要排序N个数,已经经过N-1次遍历后,已经是有序序列
        for(int i=0;i<n-1;++i){
            int index=i;//用来保存最小值索引
            //寻找第i个最小的数
            for(int j=i+1;j<n;++j){
                if(a[index]>a[j])
                    index=j; 
            }
            //将第i个数放在第i个位置上
            int temp=a[index];
            a[index]=a[i];
            a[i]=temp;
    
        }
    }

    简单选择排序算法的性能

    排序类别

    排序方法

    时间复杂度

    空间复杂度

    稳定性

    复杂性

    平均情况

    最坏情况

    最好情况

    选择排序

    简单选择排序

    O(N2)

    O(N2)

    O(N2)

    O(1)

    不稳定

    简单

     

    时间复杂度

    简单选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数总是N (N - 1) / 2

    而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 0.

    当序列反序时,移动次数最多,为3N (N - 1) /  2。

    所以,综合以上,简单排序的时间复杂度为 O(N2)。 

     

    空间复杂度

    简单选择排序需要占用 1 个临时空间,在交换数值时使用。

    运行结果 

    复制代码
    排序前:   3  5  2  8  1  2  0  8  4  1 
    第 1 趟:  0  5  2  8  1  2  3  8  4  1 
    第 2 趟:  0  1  2  8  5  2  3  8  4  1 
    第 3 趟:  0  1  1  8  5  2  3  8  4  2 
    第 4 趟:  0  1  1  2  5  8  3  8  4  2 
    第 5 趟:  0  1  1  2  2  8  3  8  4  5 
    第 6 趟:  0  1  1  2  2  3  8  8  4  5 
    第 7 趟:  0  1  1  2  2  3  4  8  8  5 
    第 8 趟:  0  1  1  2  2  3  4  5  8  8 
    第 9 趟:  0  1  1  2  2  3  4  5  8  8 
    排序后:   0  1  1  2  2  3  4  5  8  8 
    复制代码
  • 相关阅读:
    使用JDBC连接MySql时出现:The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration
    Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0
    mysql-基本命令
    C# 监听值的变化
    DataGrid样式
    C# 获取当前日期时间
    C# 中生成随机数
    递归和迭代
    PHP 时间转几分几秒
    PHP 根据整数ID,生成唯一字符串
  • 原文地址:https://www.cnblogs.com/rgly/p/7418120.html
Copyright © 2011-2022 走看看