选择排序
选择排序的思想是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。
选择排序效率是O(N^2),不稳定排序。
附上算法实现,vs2008调试通过
/********************************选择排序******************************************/
#include <vector>
#include <iostream>
using namespace std;
void selectSort(vector<int> &vec)
{
int len=vec.size();
int i,j,index;
int tmp;
for(i=0;i<len-1;i++)
{
index=i;
for(j=i+1;j<len;j++)
{
if(vec[j]<vec[index])
index=j;
}
if(index!=i)
{
tmp=vec[i];
vec[i]=vec[index];
vec[index]=tmp;
}
}
}
int main()
{
int ia[]={41,12,19,3,6,22,85,54,13};
vector<int> ivec(ia,ia+9);
selectSort(ivec);
for(size_t i=0;i<ivec.size();i++)
cout<<ivec[i]<<"\t";
cout<<endl;
system("pause");
return 0;
}