1. 程式人生 > >排序演算法3---選擇排序

排序演算法3---選擇排序

選擇排序

基本思想每一趟(例如第i趟,i=0,1,…,n-2)在後面n-i個待排序的資料元素集合中選出關鍵碼最小的資料元素,作為有序元素序列的第i個元素,待到第n-2趟做完,待排序元素集合中只剩 下1個元素,排序結束。
時間複雜度: O(n^2)
空間複雜度: O(1)
穩 定 性 :不穩定
適用場景:資料量較小,交換次數比較少

我們首先來看第一個版本

選擇排序(單邊縮小空間)
基本思想:我們定義一個maxIndex來標記區間內最大值的下標,第一次遍歷完陣列後,更新maxIndex的指向,與下標為end(最後一個元素)的元素交換,end–縮小空間,繼續遍歷更新maxIndex。
程式碼:

void SelectSort(int* arr, int size)
{
 if (arr == NULL || size <= 0)
   return;
 for (int end = size - 1; end > 0; --end)
 {
   int maxIndex = end;//最大下標
   for (int idx = 0; idx < end; ++idx)
   {
     //比最大的元素還大,更新最大下標
     if (arr[idx] > arr[maxIndex])
       maxIndex = idx;
   }
   //交換end與最大元素的值
std::swap(arr[maxIndex], arr[end]); } }

這個演算法還可以優化,我下個部落格再寫。