排序算法之簡單選擇排序

A,簡單選擇排序:每次從剩餘待排序元素中找出最小元素與第一個元素交換。執行n-1趟後,結果爲升序排序。
B,算法原理:
1)假設數組長度爲n,取i依次取0,1,...,n-2,每次找出數組中從i到n-1的最小數min;
2)然後將min與i對應的元素交換,直到i=n-1時排序結束,所有元素即爲升序排序。
下圖爲一組亂序數組的排序過程:

排序算法之簡單選擇排序
C,算法實現:
#include "iostream"

using namespace std;

 int main()

{

        void sort(int[], int);

        int array[] = {3,2,4,9,1,5,7,6,8};

        int n = sizeof(array)/sizeof(int*);

        sort(array, n);

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

                  cout<<array[i]<<" ";

        cout<<endl;

        return 0;

}

//簡單選擇排序

//array爲測試數組,n爲數組長度

void sort(int array[], int n)

{

        int temp,min;

        for(int i = 0; i < n - 1; ++i)

        {

                  min = i;

                  //循環找出剩餘元素中最小的一個

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

                  {

                           if(array[min] > array[j])

                           {

                                    min = j;

                           }

                  }

                  //將最小值與第一個元素交換位置

                  if(min != i)

                  {

                           temp = array[i];

                           array[i] = array[min];

                           array[min] = temp;

                  }

        }

}

運行結果:

排序算法之簡單選擇排序

D,複雜度分析

(a)時間複雜度:

  1)整個過程當中簡單選擇排序需要比較的次數與初始狀態無關,總的比較次數爲1+2+3+...+n-1=n(n-          1)/2,所以進行比較的時間複雜度爲O(n^2);

  2)如果初始數組爲降序排序,則需要進行n-1次交換,所以進行交換操作的時間複雜度爲O(n)。

(b)空間複雜度:程序中定義了兩個變量temp和min,所以空間複雜度爲O(1)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章