三大基础排序之——选择排序

来源:互联网 发布:网络安全保卫支队 编辑:程序博客网 时间:2024/06/05 15:10

前言:


            “假设我是最大的”这是在我学习选择排序时听见最多的话,选择排序先拿一个数,假设这个数是最大(小)的数,用这个选定的数去跟后面的一次比较,若比这个数大(小),则交换位置。




基本原理:


           选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。


实现步骤:


        1、外循环:循环每个位置(其实就是选择了这个位置,然后用内循环去选择一个合适的数,放到这个位置);
        2、内循环:在无序元素中选择一个合适的数;
        3、把第二步选中的数据放到第一步选中的位置上就可以了;




时间复杂度及稳定性


                时间复杂度:O(N^2)

                稳定性:不稳定

        分析:

                时间复杂度:第一次内循环比较N - 1次,然后是N-2次,N-3次,……,最后一次内循环比较1次。
共比较的次数是 (N - 1) + (N - 2) + ... + 1,求等差数列和,得 (N - 1 + 1)* N / 2 = N^2 / 2。舍去最高项系数,其时间复杂度为 O(N^2)。

                稳定性:

                           原始序列: 21,25,49,25*,16,08
                            排序后:08,16,   21,25*,25,49
                            两个25的位置变化了,所以是不稳定的       


代码实现:


            //从大到小排序            for (int i = 0; i < 9; i++)                 //外部循环,确定跑几趟            {                int max = i;                            //假设待排元素是最大的                for (int j = i+1; j < 10; j++)          //内部排序                     {                    if (Array [max]<Array [j])           //如果定义的最大值比 要做较的数小                    {                        max = j;                         //把该数的下标给max                           }                  }                 //交换                 temp=Array[i];                 Array=Array[max];                 Array[max]=temp;              }

总结

        以上就是对选择排序的理解,共同学习,共同进步。