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

两本教材上对于选择法上程序算法的不同,指点一下,该怎么处理

2012-02-07 
两本教材上对于选择法上程序算法的不同,指点一下我在2本教材看到关于选择法排序的程序,仔细推敲算法后,发

两本教材上对于选择法上程序算法的不同,指点一下
我在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],然后就是加了一个判断,相等时不需要交换。
[解决办法]
本质还是一样的,
关键是算法,
不要只看程序~~

热点排行