标题:请问次程序的倒数第三句的 if(k!=i) 这一句是不是多余的,因为我加没加这一 ...
只看楼主
ljl16721424
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2016-9-10
结帖率:50%
已结贴  问题点数:1 回复次数:5 
请问次程序的倒数第三句的 if(k!=i) 这一句是不是多余的,因为我加没加这一句的结果都是相同的,根本就不需要判断k是否与0相等
#include<stdio.h>
int main()
{
  void sort(int x[],int n);
  int i,*p,a[10];
  p=a;
  printf("please enter 10 integer numbers:");
  for(i=0;i<10;i++)
      scanf("%d",p++);
  p=a;
  sort(p,10);
  for(p=a,i=0;i<10;i++)
  {
  printf("%5d",*p);
  p++;
  }
  printf("\n");
  return 0;
}

void sort(int x[],int n)
{
  int i,j,k,t;
  for(i=0;i<n-1;i++)
  {
  k=i;
  for(j=i+1;j<n;j++)
      if(x[j]>x[k])
          k=j;
    if(k!=i)  
      {t=x[i];x[i]=x[k];x[k]=t;}
  }
搜索更多相关主题的帖子: numbers please 倒数 
2016-09-20 20:01
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
if(k!=i)这一行确实可以不要
2016-09-20 20:16
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
得分:1 
这是选择法排序。
对于已经有序的数据,就不会产生选择,k=i,if(k!=i)的条件将不成立,就不会执行后面的数据交换代码,可提高代码执行效率。
2016-09-20 21:42
ljl16721424
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2016-9-10
得分:0 
回复 3楼 xzlxzlxzl
请问前面不是已经定义过k=i吗?那后面k!=i的这种情况是不是就不需要判断了啊?
2016-09-20 21:58
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
得分:0 
你如果吃透选择法排序算法,就不会问4楼的问题。
以增序排序为例:虽然前面执行了k=i,但经过语句  “for(j=i+1;j<n;j++)if(x[j]>x[k])k=j;”后就会产生两个可能性,一个是a[k]已经是最小的数,k继续等于i,另一个是找到了数组里面最小的数,k的值就会改变至最小的数所在的序号,k不等于i,在这种情况下就需要将最小的数和当前的数进行交换,把最小的数调整到数组当前指向的位置(和i的指向交换),如果k=i也交换,则是自己和自己交换,这有必要吗?
2016-09-20 22:20
ljl16721424
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2016-9-10
得分:0 
回复 5楼 xzlxzlxzl
ok  谢谢了啊  懂了  刚刚接触C语言
2016-09-21 18:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-468990-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.203430 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved