首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于选择法排序的有关问题

2012-03-02 
关于选择法排序的问题对10个数字从小到大排序,我习惯按下面方法写:#includestdio.hvoid main(){int a[10

关于选择法排序的问题
对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,有劳各位解释一下,谢谢!

[解决办法]

C/C++ code
/*  选择排序 
  通过从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]);
}
}

[解决办法]
K相当于一个POINTER,
第二种写法减少了数据的抄写

热点排行