zoukankan      html  css  js  c++  java
  • 选择排序的时间复杂度分析

    每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最前(最后),直到所有待排序的数据元素排完。选择排序是不稳定的排序方法。

    选择排序是给每一个位置选择当前元素最小的,比方给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推。直到第n-1个元素,第n个元素不用选择了,由于仅仅剩下它一个最大的元素了。那么,在一趟选择。假设一个元素比当前元素小。而该小的元素又出如今一个和当前元素相等的元素后面。那么交换后稳定性就被破坏了。比較拗口。举个样例,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。

    方法一:

    template<class T>

    void SelectSort(T a[],int n)

    {

          for (int i = n-1;i>0;--i)

          {

               int max = i;

               for (int j = 0;j < i;++j)

                    if (a[j] > a[max])

                         max = j;

               if (max != i)

                    Swap(a[i],a[max]);

             

          }

    }

    方法二:

    template<class T>

    void SelectSort(T a[],int n)

    {

         for (int i = n-1;i > 0;--i)

         {

              int max = 0;

              for (int j = 1;j <= i;++j)

                  if (a[j] > a[max])

                      max = j;

               if (max != i)

                  Swap(a[i],a[max]);

         }

    }

    方法三:

    template<class T>

    void SelectSort(T a[],int n)

    {

        bool sorted = false;

         for (int i = n-1;!sorted&&i > 0;--i)

         {

              sorted = true;

              int max = 0;

              for (int j = 1;j <= i;++j)

              {

                    if (a[j] > a[max])

                        max = j;

                    else

                        sorted = false;

              }

              if (max != i)

                   Swap(a[i],a[max]);

         }

    }

    方法二和方法三更加像冒泡排序了。只是还是有差别的,至少交换的次数变少了。

    对于方法一和方法二。比較次数O(n^2)。比較次数与keyword的初始状态无关,最好和最坏情况下都为O(n^2),可是对于方法三,最好情况下外层循环仅仅运行一次。里面运行n-1次,因此时间复杂度为O(n)。最坏情况下仍为O(n^2)。

    
  • 相关阅读:
    Binary Search Tree Iterator 解答
    Invert Binary Tree 解答
    Min Stack 解答
    Trapping Raining Water 解答
    Candy 解答
    Jump Game II 解答
    Implement Hash Map Using Primitive Types
    Gas Station 解答
    Bucket Sort
    HashMap 专题
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7053826.html
Copyright © 2011-2022 走看看