关于选择法排序的问题
对10个数字从小到大排序,我习惯按下面方法写:
#include<stdio.h>
void main()
{
int a[10]={1,3,5,7,9,2,4,6,8,10};
int i,j,t;
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
但是我看有的书和课件上的循环部分是这么写的:
for(i=0;i<9;i++)
{
k=i;
for(j=i+1;j<10;j++)
if(a[k]>a[j])
k=j;
if(i!=k)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
为什么要多定义一个变量k,有劳各位解释一下,谢谢!
[解决办法]
/* 选择排序
通过从n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换
*/
template <class T>
void selectSort(T data[],int n){
for(int i=0,j,least;i <n-1;i++){
for(j=i+1,least = i;j <n;j++)
if(data[least] > data[j])
least = j;
swap(data[least],data[i]);
}
}