首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 一个小问题! [已结贴,结贴人:shuguangleo]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • shuguangleo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-18 16:12:18 楼主
    我有一个数组A{1,2,3,4,5,6,7,8,9},给定一个数B=3.789,如何从数组A中快速找出与B最接近的数字!

    关键找的要快!应为数组A中的数可能很多,一定要以最快的方式找出来!
    如何计算?
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jsh1313
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-18 16:24:581楼 得分:0
    你的数组,是整数组吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • conan304
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-18 16:31:092楼 得分:0
    不知道用LinQ会不会快些?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qq452211588
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-18 16:36:493楼 得分:0
    如果数组不是特别大(几万个以上的元素)速度根本体现不出来
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • shuguangleo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-18 16:37:404楼 得分:0
    浮点数组!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zswang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      7

    发表于:2008-08-18 17:58:555楼 得分:20
    首先确定A是按大小顺序排列。。。
    然后用对分查找,参考如下代码:
    C# code
    private int BinarySearch(double[] array, double value) { if (array == null || array.Length <= 0) return -1; int low = 0; int hi = array.Length - 1; while (low <= hi) { int m = low + ((hi - low) >> 1); // 中间值 if (value > array[m]) low = m + 1; else hi = m - 1; } low = Math.Min(low, array.Length - 1); if (low <= 0) return low; else return value - array[low - 1] < array[low] - value ? low - 1 : low; } private void button1_Click(object sender) { double[] A = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //Array.Sort(A);//初始化,之后可以顺序插入 double[] B = { 1, 2, 2.5, 3.51, 3.49, 9, 100}; for (int i = 0; i < B.Length; i++) { int j = BinarySearch(A, B[i]); Console.WriteLine("B={0},Index:{1},Value:{2}", B[i], j, j < 0 ? -1 : A[j]); } }


    ---输出----
    B=1,Index:0,Value:1
    B=2,Index:1,Value:2
    B=2.5,Index:2,Value:3
    B=3.51,Index:3,Value:4
    B=3.49,Index:2,Value:3
    B=9,Index:8,Value:9
    B=100,Index:8,Value:9
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zswang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      7

    发表于:2008-08-18 18:18:456楼 得分:0
    有人说用linq写,这算写着玩,不能保证性能,以测试结果为主。
    C# code
    double[] A = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //Array.Sort(A);//初始化,之后可以顺序插入 double[] B = { 1, 2, 2.5, 3.51, 3.49, 9, 100}; for (int i = 0; i < B.Length; i++) { IEnumerable<double> query = from student in A orderby Math.Abs(student - B[i]) select student; Console.WriteLine("B={0},Value:{1}", B[i], query.First<double>()); }


    ---输出----
    B=1,Value:1
    B=2,Value:2
    B=2.5,Value:2
    B=3.51,Value:4
    B=3.49,Value:3
    B=9,Value:9
    B=100,Value:9
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved