| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8121 人关注过本帖
标题:[代码贴]在一个数组中寻找最大值和最小值所需要进行比较的次数
只看楼主 加入收藏
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:0 
可移植性:国际标准>=国家>=行业标准>=企业标准
2017-07-13 19:12
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
r版委托我删帖~我是来吃瓜的~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-07-13 19:34
lmlm1001
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:4
帖 子:107
专家分:550
注 册:2015-3-1
收藏
得分:0 
数组大小为ArraySize,若ArraySize为偶数,则需要(n-2)/2×3+1次比较;若ArraySize位奇数,则需要(n-1)/2×3次比较。以两个数为一组,首先比较这两个的大小,然后分别与当前最小值和最大值比较。


数组 n = 4, array = 1, 2, 3, 4
从左到右冒泡比较,只需要3次或者6次。
按照楼主的公式 应该是4次。

数组 n = 5, array = 1, 2, 3, 4, 5
从左到右冒泡比较,只需要4次或者8次。
按照楼主的公式 应该是6次。

公式似乎哪里不对。
2017-07-13 22:41
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:0 
以下是引用lmlm1001在2017-7-13 22:41:42的发言:

 
 
数组 n = 4, array = 1, 2, 3, 4
从左到右冒泡比较,只需要3次或者6次。
按照楼主的公式 应该是4次。
 
数组 n = 5, array = 1, 2, 3, 4, 5
从左到右冒泡比较,只需要4次或者8次。
按照楼主的公式 应该是6次。
 
公式似乎哪里不对。
公式没错,这是同时得到最大值和最小值。可以看看源代码和执行结果
2017-07-13 23:00
lmlm1001
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:4
帖 子:107
专家分:550
注 册:2015-3-1
收藏
得分:0 
to 14楼:

数组 n = 4, array = 1, 2, 3, 4
3次具体步骤:
取 1,双赋值。
和2比对,先判断最大值,2 > 1,跳过最小值
和3比对,先判断最大值,3 > 2,跳过最小值
和4比对,先判断最大值,4 > 3,跳过最小值

6次具体步骤:
取 1,双赋值。
和2比对,先判断最小值,再判断最大值
和3比对,先判断最小值,再判断最大值
和4比对,先判断最小值,再判断最大值

数组 n = 5 略
2017-07-13 23:43
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:0 
以下是引用lmlm1001在2017-7-13 23:43:45的发言:

to 14楼:
 
数组 n = 4, array = 1, 2, 3, 4  
3次具体步骤:
取 1,双赋值。
和2比对,先判断最大值,2 > 1,跳过最小值
和3比对,先判断最大值,3 > 2,跳过最小值
和4比对,先判断最大值,4 > 3,跳过最小值
 
6次具体步骤:
取 1,双赋值。
和2比对,先判断最小值,再判断最大值
和3比对,先判断最小值,再判断最大值
和4比对,先判断最小值,再判断最大值
 
数组 n = 5 略


你执行程序后就会看到具体的比较过程,比你这么猜测的强的多
2017-07-13 23:54
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:0 
另外,看我在1楼最上面写的哪一段话的最后一句解释。
2017-07-13 23:55
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:0 
以下是引用lmlm1001在2017-7-13 23:43:45的发言:

to 14楼:
 
数组 n = 4, array = 1, 2, 3, 4  
3次具体步骤:
取 1,双赋值。
和2比对,先判断最大值,2 > 1,跳过最小值
和3比对,先判断最大值,3 > 2,跳过最小值
和4比对,先判断最大值,4 > 3,跳过最小值
 
6次具体步骤:
取 1,双赋值。
和2比对,先判断最小值,再判断最大值
和3比对,先判断最小值,再判断最大值
和4比对,先判断最小值,再判断最大值
 
数组 n = 5 略

代码中所用的算法,压根就不是你这么想的。
2017-07-13 23:58
lmlm1001
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:4
帖 子:107
专家分:550
注 册:2015-3-1
收藏
得分:0 
数组大小为ArraySize,若ArraySize为偶数,则需要(n-2)/2×3+1次比较;若ArraySize位奇数,则需要(n-1)/2×3次比较。以两个数为一组,首先比较这两个的大小,然后分别与当前最小值和最大值比较。

我是说你这句话有问题,至少在我提出的情况下是不对的。
如果你的程序是为了验证这句话的正确性的话,那么就没有必要;
如果你的这句话是总结你的程序的话,那么我提出的情况就是没有必要的。

附 “我这么猜测” 的代码。

for( max = array[0], min = array[0]; i < arraysize; ++i )
    if( array[i] > max )
        max = array[i];
    else if( array[i] < min )
        min = array[i];
    else
        NULL;

for( max = array[0], min = array[0]; i < arraysize; ++i )
    if( array[i] < min )
        min = array[i];
    else if( array[i] > max )
        max = array[i];
    else
        NULL;
2017-07-14 00:14
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:0 
以下是引用lmlm1001在2017-7-14 00:14:38的发言:

 
我是说你这句话有问题,至少在我提出的情况下是不对的。
如果你的程序是为了验证这句话的正确性的话,那么就没有必要;
如果你的这句话是总结你的程序的话,那么我提出的情况就是没有必要的。
 
附 “我这么猜测” 的代码。
 
for( max = array[0], min = array[0]; i < arraysize; ++i )
    if( array > max )
        max = array;
    else if( array < min )
        min = array;
    else
        NULL;
 
for( max = array[0], min = array[0]; i < arraysize; ++i )
    if( array < min )
        min = array;
    else if( array > max )
        max = array;
    else
        NULL;

嗯,你猜的的代码所用的是算法A,我贴出来的代码所用的是算法B。算法A和算法B是不同的,所以需要比较的次数也是不同的。你用的算法的比较次数大概是2*(n-1)。在海量数据下,理论上算法B所用的时间比算法A少了25%。实际,上两数比较所消耗的性能是非常客观的,所以在程序设计时尽量减少两数的比较次数,可以显著地提升性能。


[此贴子已经被作者于2017-7-14 00:46编辑过]

2017-07-14 00:38
快速回复:[代码贴]在一个数组中寻找最大值和最小值所需要进行比较的次数
数据加载中...
 
   



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

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