简单选择排序算法(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;
}