选择排序
选择排序的原理比较简单,每次遍历待排序数组,找到关键字最小的项目,将其放置在已经排序好的序列最后面,直至所有的项目都排序完全。
所以选择排序的时间复杂度主要是来自遍历查询,相比于插入排序,需要不断的交换项目的位置,选择排序每次至多交换一次。其时间复杂度为 Ω(n2) ;空间复杂度,为 Ω(n) ;由于每次交换位置的时候,将会打乱原来项目的相对位置,因而选择排序是一种不稳定排序。
#include<iostream>
using namespace std;
void swap(int& a,int& b)
{
int tmp=a;
a=b;
b=tmp;
}
void choiceSort(int* p,int length)
{
for(int i=0;i<length-1;i++)//总共需要进行length-1次遍历查询
{
int index=i;//标志每次遍历最小项目的index
for(int j=i+1;j<length;j++)//每次遍历是从未排序的项目开始
if(p[j]<p[index])
index=j;
swap(p[i],p[index]);
}
}
int main()
{
int data[5]={5,4,3,2,1};
choiceSort(data,sizeof(data)/sizeof(data[0]));
for(int i=0;i<sizeof(data)/sizeof(data[0]);i++)
cout<<"第"<<(i+1)<<"个项目:"<<data[i]<<endl;
}