信息学奥赛系列教程:选择排序

选择排序:

选择排序(Selection sort)是一种简单的排序算法。它的基本思想是每一次从待排序数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。

如下图所示:对5,3,4,1,6,2进行排序,过程如下:

信息学奥赛系列教程:选择排序

选择排序的代码实现:

#include <iostream>
using namespace std;
const int MAXN =10001; 
int main()
{
  int n,k,i,j;
  float temp,a[MAXN];
  cout<<"请输入排序个数:"<<endl;
  cin>>n;
  for (i=0;i<n;i++)
  {
	 cout<<"请输入第"<<i+1<<"个数:"<<endl;
	 cin>>a[i];
  }
  
  for (i=0;i<n;i++)
  {
	  	k=i;
	  	//遍历以后的各位数,与当前的数相比,找出最小的数的下标 
	  	for (j=i+1;j<n;j++)
	  	{
	  		if (a[j]<a[k])
	  		{
	  			k=j;  //数组元素的下标
	  		}	   
	  	}
	  	//交换,将最小的数移动到最前 
	    if (k!=i)
	    {
	    	temp=a[i];
	    	a[i]=a[k];
	    	a[k]=temp;
	    }
  } 
  for (i=0;i<n;i++)
  {
  	cout<<a[i]<<" ";
  }
  
}

选择排序的时间复杂度:

元素交换操作介于0到n-1之间,复杂度O(n)

比较操作,n(n-1)/2次,复杂度O(n2)

比较后的赋值操作:3(n-1),复杂度O(n)

选择排序的稳定性:

在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了选择排序是一种不稳定的排序。