| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9977 人关注过本帖
标题:对同一列数据用各种排序法来统计分别各自交换了多少次,来比较用哪种方法交 ...
只看楼主 加入收藏
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 20楼 自学的数学
看执行了多少次   if(a[j]>a[j+1])

~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-05-23 10:00
自学的数学
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: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 22楼 自学的数学
的确像你所说的,用判断这个词感觉比较合理~
正常来说,其实冒泡排序无论10个数字怎么排列都是90次,这个和本身的算法有关,至于其它排序就不一定了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-05-23 11:14
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
回复 23楼 九转星河
但是怎么把这个判断次数加到代码里面去呢??
2018-05-23 11:21
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 23楼 九转星河
统计到某次内层循环没有执行交换就可以break 不一定要跑完全部循环
这里出现次数最多是因为这个数组逆序 刚刚好对应最差时间复杂度
而且不是90次
9+8+7+6+5+4+3+2+1 == 45
每次冒泡 比上一次冒泡减少1

https://zh.
2018-05-23 11:21
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
请用代码说话
2018-05-23 11:38
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 25楼 lin5161678
这样可用break可以看看平均能减少多少次也好~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-05-23 11:59
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 26楼 自学的数学
图片附件: 游客没有浏览图片的权限,请 登录注册

https://zh.
2018-05-23 13:35
自学的数学
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
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用自学的数学在2018-5-23 16:08:35的发言:
   int a[10]={10,9,8,7,6,5,4,3,2,1};


我强调了很多次
这里出现次数最多是因为这个数组逆序 刚刚好对应最差时间复杂度


25次排列的数列是
   int a[10]={10,5,3,6,1,9,4,8,2,7};

https://zh.
2018-05-23 16:29
快速回复:对同一列数据用各种排序法来统计分别各自交换了多少次,来比较用哪种方 ...
数据加载中...
 
   



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

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