Qingjian
2008-11-21 12:14
浏览 245
已采纳

请教一个关于算法的问题!

如何高效的将一个数组进行 值范围的划分?

比如: 有个 数组长度 10000,a[] 并且是10000个随机正数。

现在有另外四个数组或容器分别  b,c,d,e ;

b 存放5-100的值

c 存放 500-3000的值

d 存放 4000-6000的值

e 存放 其他(不上以上三个范围的值)。



有什么高效的 算法?

先谢谢了。 我自己的想法 先对 数组a 进行排序使用java 的arrays.sort 的方法排序 然后再用 折半算法 去找范围。想问问大家还有什么其他好的算法?
问题补充

luogui551 写道
难道一个for,外加一个if,两个else if,一个else?


如果 a中的记录有很多 如果100000条 放在 80个划分范围容器里。 对个数组中的对象 要比较80次,100000个对象就要 比较判断 80*100000 效率太低了!
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • iteye_19016 2008-11-25 10:04
    已采纳

    这个应该是最高效率的了 你自己在控制台测试就知道 分给我吧。我等分问问题!

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • you_hurt_my_heart 2008-11-21 12:14

    这个题有什么陷进?咋看都是一个循环就完事了

    评论
    解决 无用
    打赏 举报
  • iteye_7425 2008-11-21 12:14

    [quote="duooluu"]这个题有什么陷进?咋看都是一个循环就完事了[/quote]

    评论
    解决 无用
    打赏 举报
  • W-Aires 2008-11-21 12:14

    难道一个for,外加一个if,两个else if,一个else?

    评论
    解决 无用
    打赏 举报
  • iteye_19016 2008-11-25 10:03

    int tmp = 0;
    int b = new b[10000]; int b=0;
    int c = new b[10000]; int c=0;
    int d = new b[10000]; int d=0;
    int e = new b[10000]; int e=0;

    for(int i= 0 ; i <= 10000; i++){
    tmp = a[i];
    if(tmp>=5&&tmp<=100){
    b[b++] =tmp;
    continue;
    }

    if(tmp>=500&&tmp<=3000){
        c[c++] =tmp;
        continue;
    } 
    
    if(tmp>=4000&&tmp<=6000){
        d[d++] =tmp;
        continue;
    } 
    e[e++]=tmp;
    

    }

    最高效方法,只循环10000次!
    而且并不是每次都执行完 循环体
    if 使用 && 逻辑,系统自动使用短路原理 if如果为false 只需要执行一半就知道

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题