| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10318 人关注过本帖
标题:对同一列数据用各种排序法来统计分别各自交换了多少次,来比较用哪种方法交 ...
取消只看楼主 加入收藏
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
回复 21楼 九转星河
你这个回答不对,if(a[j]>a[j+1])不是判断了多少次,而是执行了多少次,按照你的意思,如果if(a[j]<a[j+1])就不属于判断了吗?还有如果原始数据本来就是{1,2,3,4,5,6,7,8,9,10};就不用判断了吗?
所以判断次数应该是
for(i=0;i<len-1;i++) 乘以for(j=0;j<len-i-1;j++)。乘出来的结果是多少,好象是90次。
2018-05-23 11:08
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
回复 23楼 九转星河
但是怎么把这个判断次数加到代码里面去呢??
2018-05-23 11:21
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
请用代码说话
2018-05-23 11:38
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
不对,还是45次。
见代码:
程序代码:
#include <stdio.h>

 void sort(int *a,int len)

 {
   int i,j,t,z,count=0;
   for(i=0;i<len-1;i++)  
     {
         int mask=1;
       for(j=0;j<len-i-1;j++)
          {
           if(a[j]>a[j+1])
              {
                  mask=0;
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
                printf(" 第 %3d 次交换: ",++count);
                for(z=0;z<10;z++)
                   printf("%4d ",a[z]);
                printf("\n");
             }
          }
          if(mask)
             break;
    }
    printf("共交换%4d 次",count);
      printf("\n");
  }
int main(int argc, char *argv[])
{
   int a[10]={10,9,8,7,6,5,4,3,2,1};
   int i=0;
   //sort(a,10);
   printf("这段代码是用冒泡排序法来统计共交换了多少次。\n ");
    printf("交换前的数据: ");
   for(i=0;i<10;i++)
              printf(" %4d",a[i]);
   printf("\n");
   sort(a,10);
   printf(" 交换后的数据: ");
   for(i=0;i<10;i++)
             printf("%4d ",a[i]);
   return 0;
}
2018-05-23 16:08
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
回复 28楼 lin5161678
对于 a[10]={10,9,8,7,6,5,4,3,2,1};用你的方法来判断,还是45次,并且代码中的 if(mask) break;根本不起作用,看来对于这个数列,用冒泡法来判断和交换都始终是45次了。
2018-05-23 17:34
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
回复 32楼 lin5161678
我用 a[10]={11,9,8,12,6,14,15,3,2,1};来验证,得出的判断和交换次数(有if(mask)break;和无 if(mask)break;都一样)是31次,就是说 if(mask)break;没用。
2018-05-23 21:07
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
谢谢!第一个加精贴!!
2018-05-25 17:12
快速回复:对同一列数据用各种排序法来统计分别各自交换了多少次,来比较用哪种方 ...
数据加载中...
 
   



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

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