简单选择排序的思想:通过n-i次关键字间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1<=i<=n)个记录交换之。下面通过代码进行说明:
/************************************************************************/
/*简单选择排序 3 1 2 5 4 */
/************************************************************************/
void SelectionSort(int array[], int n){
for (int i = 0; i < n-1;i++)
{
int smallest = i;
for (int j = i + 1; j < n;j++)
{
if (array[smallest]>array[j])
{
smallest = j;//找到最小值对应的index
}
}
if (smallest != i) //如果不相等说明最小值已经改了,需要调换
{
swap(array, i, smallest);
}
}
}
/************************************************************************/
/*交换函数,交换数组中两个元素的位置 */
/************************************************************************/
void swap(int array[], int i, int j){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
时间复杂度为:O(n^2),辅助空间为O(1)。
简单选择排序是不稳定的,反例如下:
关键字:2 2 1,经过排序第一个2和第二个2的相对位置发生了变化!所以是不稳定的!