简单选择排序的关键
1、通过前后两个数据相比较,找出数列中最小的数据。关键词:比较
2、将最小的数据同数列的第一个数据i交换位置,再继续比较,第二小的与数列中i+1的数据交换位置,直到数列中仅剩最后一个数据没有其他可比较的无序数据时,排序结束。关键词:交换
只要弄清这两个关键词,简单选择排序也就能迎刃而解了!
具体的代码如下
#include<stdio.h>
void swap(int &x,int &y) //交换x和y值
{
int tmp=x;
x=y;y=tmp;
}
void disp(int a[],int n) //输出a中的所有元素
{
int i;
for(i=0;i<n;i++)
printf("%d",a[i]);
printf("\n");
}
void SelectSort(int a[],int n,int i) //递归的简单选择排序
{
int j,k;
if(i==n-1)
return; //满足递归出口条件
else{
k=i; //k记录a[i…n-1]中最小元素的下标
for(j=i+1;j<n;j++) //在a[i…n-1]找最小元素a[k]
if(a[j]<a[k])
k=j;
if(k!=i) //若最小元素不是a[i]
swap(a[i],a[k]); //a[i]和a[k]交换
SelectSort(a,n,i+1);
}
}
int main()
{
int n=10;
int a[]={2,5,1,7,10,6,9,4,3,8};
printf("排序前:");
disp(a,n);
SelectSort(a,n,0);
printf("排序后:");
disp(a,n);
}