基本思想
说明:在第i次排序时,经过前面的i-1次排序,a[0],a[1],...,a[i-2]已经有序,这次排序找出a[i],...,a[n-1]的最小元素,并与a[i-1]比较,将第i-1个元素就位
具体如下:
第1次,找到a[1],a[2],...,a[n-1]的最小元素,若该元素与a[0]不等,则交换这两个元素
第2次,找到a[2],a[3],...,a[n-1]的最小元素,若该元素与a[1]不等,则交换这两个元素
第i次,找到a[i],...a[n-1]的最小元素,若该元素与a[i-1]不等,则交换这两个元素
第n-2次,找到a[n-2],a[n-1]的最小元素,若该元素与a[n-3]不等,则交换这两个元素
第n-1次,找到a[n-2]与a[n-1]的最小元素,若该元素与a[n-2]不等,则交换这两个元素
排序结束
代码:
void SelectSort(int a[],int n)
{
for(int i=0;i<n-1;i++)
{
int k=i;
for(int j=i+1;j<n;j++)
if(a[k]>a[j])k=j;
if(k!=i)swap(a[i],a[k]);
}
}
swap函数交换两个元素,如下
void swap(int &x,int &y)
{
int tmp=x;
x=y;
y=tmp;
}