简单选择排序

选择排序的基本思想:

每一趟在数个记录里选取关键字最小的记录作为有序序列的第i个记录。实现代码如下:

void SelectSort(int a[], int n)
{
	int k, temp;
	for (int i =0 ; i < n - 1; ++i)
	{
		k = i;
		for (int j = i + 1; j < n; ++j)
		{
			if (a[k] > a[j])
			{
				k = j;
			}
		}
		if (k != i)
		{
			temp = a[i];
			a[i] = a[k];
			a[k] = temp;
		}
	}
}

从简单排序的实现过程来看,与冒泡算法相比,最大的特点就是移动数据次数相当少。

时间复杂度:

无论是最差还是最好的情况,选择排序比较的次数都一样多,第i趟需要比较n-i次,总共需要比较n-1+n-2+...+1 = n(n-1)/2次。最好的情况时交换的次数为0,最差的时候,交换的次数为n-1次,基于最终的交换次数和比较次数,因此总的时间复杂度为O(n^2)。尽管与冒泡排序同样的时间复杂度,但是简单选择排序的性能还是略优于冒泡排序。

稳定性:

选择排序在每一趟中选择最小的数据与第一个位置的数据交换,以此类推,直到n-1个元素,如果在某一趟中,若有一个元素比当前元素小,而此时在该元素的前面又有一个和当前元素相等的元素,交换完成后,序列的稳定性就被破坏了。比如,有序列5,4,5,3,6在第一趟结束后,第一个位置的5会和3交换,那么原序列中的两个5的相对前后顺序就被破坏了,因此简单选择排序是一个不稳定的排序算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章