参考资料来自维基百科点击打开链接
选择排序的思想:
从未排序的序列中找到最大(最小)值,然后放到序列的开始位置,循环这个过程,直到所有元素排好序。
void SelectionSort(int *a, int len)
{
//最后一个不用排,因为已经与前一个进行过比较了
int minIndex = 0;
for(int i = 0; i < len - 1; i++)
{
minIndex = i;
for(int j = i + 1; j < len; j++)
{
if(a[j] < a[minIndex])
{
minIndex = j;
}
}
if(minIndex != i)
{
int tmp = a[i];
a[i] = a[minIndex];
a[minIndex] = tmp;
}
}
}
之前一直对选择排序有偏见,认为他的效率太低,冒泡排序比他好多了,今天仔细看了下分析,n个元素选择排序,共进行(n-1)+(n-2)+(n-3)+...+1 = n(n-1)/2次比较,最坏情况下至多进行n-1次交换,交换次数比冒泡排序少多了,由于CPU的交换时间比比较时间要多,在n比较小的情况下,选择排序是比冒泡排序要快的。