选择排序的算法原理:第1趟,在待排序记录a[0]~a[n-1]中选出最大的记录,将它与a[n-1]交换;第2趟,在待排序记录a[0]~a[n-2]中选出最小的记录,将它与a[n-2]交换;以此类推,第i趟在待排序记录a[0]~a[n-i]中选出最小的记录,将它与a[n-i]交换,使有序序列不断增长直到全部排序完毕。
算法实现:
#include<iostream>
using namespace std;
template<class T>
int indexOfMax(int n,T a[])
{
int index = 0;
T maxofm = a[0];
for (int i = 1; i < n; i++)
{
if (maxofm < a[i])
{
index = i;
maxofm = a[i];
}
}
return index;
}
template<class T>
void swap(T* a, T* b)
{
T temp;
temp = *a;
*a = *b;
*b = temp;
}
template<class T>
void selectionSort(T seleb[], int n)
{
for (int size = n; size > 1; size--)
{
int j = indexOfMax(size, seleb);
swap(&seleb[j], &seleb[size - 1]);
}
}
int main()
{
int a[8] = { 1, 2, 3, 6, 4, 7, 5, 9 };
selectionSort(a, 8);
for (int i = 0; i < 8; i++)
{
cout << a[i] << endl;
}
return 0;
}
平均时间复杂度:O(n2)
空间复杂度:O(1)
不稳定,排序过程中数据在内存里;