天天看點

簡單選擇排序算法

簡單選擇排序算法(Simple Select Sort) 就是通過n-1次關鍵字間的比較,從n-1+i個記錄中選出關鍵字最小的記錄,并好第i(1<= i <=n)個記錄交換

** 注意交換時的條件判斷

核心排序部分

void SimpleSelectSort(int * Array,int n)
{
  int iMin = 0;
  for(int i = 0;i <n-1;i++)
  {
    iMin = i;
    for(int j = i+1;j<n;j++)
    {
      if(Array[iMin]>Array[j])
      {
        SWAP(Array[iMin], Array[j]);
        //  或者 SWAP(iMin,j);
      }
    }

    if(i!=iMin) // 必須要加上
    {
      SWAP(Array[i], Array[iMin]);
    }
    
  }
}      

算法複雜度: O(n^2)

#include <iostream>
#include <windows.h>
using namespace std;

#define SWAP(X,Y) X=X+Y;Y=X-Y;X=X-Y

void PrintArray(int *Array, int iSize)
{
  for (int i = 0; i < iSize; i++)
  {
    cout << "Current Value is " << Array[i] << endl;
  }
}
void SimpleSelectSort(int * Array,int n)
{
  int iMin = 0;
  for(int i = 0;i <n-1;i++)
  {
    iMin = i;
    for(int j = i+1;j<n;j++)
    {
      if(Array[iMin]>Array[j])
      {
        SWAP(Array[iMin], Array[j]);
        //  或者 SWAP(iMin,j);
      }
    }

    if(i!=iMin) // 必須要加上
    {
      SWAP(Array[i], Array[iMin]);
    }
    
  }
}
int main()
{
  int a[10] = { 9,10,8,7,6,5,4,3,2,1 };
  SimpleSelectSort(a,10);
  PrintArray(a,10);
  system("pause");
  return 0;
}