两本教材上对于选择法上程序算法的不同,指点一下,该怎么处理
两本教材上对于选择法上程序算法的不同,指点一下
我在2本教材看到关于选择法排序的程序,仔细推敲算法后,发现了个小问题.
潭浩强 c程序设计 选择法
viod sort(int array[],int n)
{
int i,j,k,t;
for(i=0;i <n-1;i++)
{
k=i;
for(j=i+1;j <n;j++)
if(array[j] <array[k])k=j;
t=array[k];
array[k]=array[i];
array[i]=t;
}
}
A First Book Of ANSI C (FOurth Edition) 选择法
int selectionsort(int num[],int numel)
{
int i,j,min,minidx,temp,moves=0; //moves 跟踪交换 minidx 索引值//
for(i=0;i <(numel-1);i++)
{
min=num[i];
minidx=i;
for(j=i+1;j <numel;j++)
{
if(num[j] <min)
{
min=num[j];
minidx=j;
}
}
if(min <num[i])
{
temp=num[i];
num[i]=min;
num[minidx]=temp;
moves++;
}
}
return moves;
}
两个程序分别为(1)和(2).
不同之处在于(2)的程序中多了一段代码
if(min <num[i])
{
temp=num[i];
num[i]=min;
num[minidx]=temp;
moves++;
}
现在的问题是程序(1)可以不要补上这段算法,程序检测没有问题,为什么会这样哦!!
大家指点一下..
------解决方案--------------------
“可以不要补上这段算法”,两段写法不同,楼主仔细看看程序执行过程
如果看不明白,就根据算法自己写一段,比较一下就清楚了
------解决方案--------------------
本质上是一样的,下面的一种把 min 就相当于 array[k] , minidx 就相当于 k
就是说,下面一种保存了两个东西,事实上,min就是 num[minidx],然后就是加了一个判断,相等时不需要交换。
------解决方案--------------------
本质还是一样的,
关键是算法,
不要只看程序~~
我在2本教材看到关于选择法排序的程序,仔细推敲算法后,发现了个小问题.
潭浩强 c程序设计 选择法
viod sort(int array[],int n)
{
int i,j,k,t;
for(i=0;i <n-1;i++)
{
k=i;
for(j=i+1;j <n;j++)
if(array[j] <array[k])k=j;
t=array[k];
array[k]=array[i];
array[i]=t;
}
}
A First Book Of ANSI C (FOurth Edition) 选择法
int selectionsort(int num[],int numel)
{
int i,j,min,minidx,temp,moves=0; //moves 跟踪交换 minidx 索引值//
for(i=0;i <(numel-1);i++)
{
min=num[i];
minidx=i;
for(j=i+1;j <numel;j++)
{
if(num[j] <min)
{
min=num[j];
minidx=j;
}
}
if(min <num[i])
{
temp=num[i];
num[i]=min;
num[minidx]=temp;
moves++;
}
}
return moves;
}
两个程序分别为(1)和(2).
不同之处在于(2)的程序中多了一段代码
if(min <num[i])
{
temp=num[i];
num[i]=min;
num[minidx]=temp;
moves++;
}
现在的问题是程序(1)可以不要补上这段算法,程序检测没有问题,为什么会这样哦!!
大家指点一下..
------解决方案--------------------
“可以不要补上这段算法”,两段写法不同,楼主仔细看看程序执行过程
如果看不明白,就根据算法自己写一段,比较一下就清楚了
------解决方案--------------------
本质上是一样的,下面的一种把 min 就相当于 array[k] , minidx 就相当于 k
就是说,下面一种保存了两个东西,事实上,min就是 num[minidx],然后就是加了一个判断,相等时不需要交换。
------解决方案--------------------
本质还是一样的,
关键是算法,
不要只看程序~~