当前位置:编程学习 > C#/ASP.NET >>

如何使用二分查找查数据?

比如数据是:
7350,3930,624,-35
7350,3931,624,-36
7350,3932,624,-37
7350,3933,625,-38
7350,3934,625,-39
7350,3935,625,-40
7351,3930,616,-28
7351,3931,616,-29
7351,3936,617,-34
7351,3937,617,-35
7351,3938,617,-36
7352,3930,608,-21
7352,3931,608,-22
7352,3932,608,-23
7352,3933,609,-24
7352,3934,609,-25
7353,3930,601,-14
7353,3931,601,-15
7353,3932,601,-16
7353,3933,601,-17
7353,3934,601,-18
7353,3935,601,-19
7353,3936,601,-20
7353,3937,601,-21
7353,3938,601,-22
7353,3939,601,-23
7354,3930,594,-8
7354,3931,594,-9
7354,3932,594,-10
7354,3933,594,-11
7354,3934,594,-12
怎么来根据第一列的数据的排列顺序使用二分查找定位1行?请高手解答 谢了! --------------------编程问答-------------------- 没看明白,你第一行的数据在后面都找不到。 --------------------编程问答--------------------  就二分查找呗,在二分查找中要注意一个问题,就是当2的-N次方小于1后(N就是当前已经查找的次数),就不要再进行这个计算,直接移动1位就行了。 --------------------编程问答--------------------  int left = 0;
            int right = line.Length - 1;

            while (left <= right)
            {
                int middle = (left + right) / 2;
                if (data[middle][0] == lloffset.longitude && data[middle][1]==lloffset.latitude)
                {  

                    xx = Convert.ToInt32(data[middle][2]);
                    yy = Convert.ToInt32(data[middle][3]);
                    break;
                }
               else if (lloffset.longitude >= data[middle][0])
                {
                    left = middle + 1;
                }
                else if (lloffset.longitude <= data[middle][0])
                {
                    right = middle - 1;
                }

            } --------------------编程问答-------------------- 上面会出错 怎么解决? --------------------编程问答-------------------- UP 学习 --------------------编程问答-------------------- 先实现一个ICompare接口,然后直接用BinarySearch就可以,看了一下LZ的数据,主要是最后一位负数的问题,Compare是按照绝对值来做的。 --------------------编程问答-------------------- 路过,来瞧瞧 --------------------编程问答-------------------- 有100条记录 
1.找前50条记录是否存在你要的数据,有就退出.
2.找剩下的50条记录的前25跳记录是否存在你要的数据,有就退出.
3.找剩下的25条记录的前12.5跳记录是否存在你要的数据,有就退出.
4.找剩下的12.5条记录的前6跳记录是否存在你要的数据,有就退出.
5.找剩下的6条记录的前3跳记录是否存在你要的数据,有就退出.
6.找剩下的3条记录的前1.5跳记录是否存在你要的数据,有就退出.
......知道最后剩下一条为止

上面存在小数.自己考虑取整吧. --------------------编程问答--------------------   int left = 0;
            int right = line.Length - 1;

            while (left <= right)
            {
                int middle = (left + right) / 2;
                if (data[middle][0] == lloffset.longitude )
                {
                    if (data[middle][1] == lloffset.latitude)
                    { 
                       x=data[middle][2];
                        y=data[middle][3];         
                      break;

                    }
                    else if (lloffset.latitude > data[middle][1])
                    {
                        middle += 1;
                        
                    }
                    else if (lloffset.longitude < data[middle][1])
                    {
                        middle -= 1;
                       
                    }

                }
               else if (lloffset.longitude >data[middle][0])
                {
                    left = middle + 1;
                }
                else if (lloffset.longitude <data[middle][0])
                {
                    right = middle - 1;
                }

            }
我想能正确找到数据  但有错 求修改 求解决; --------------------编程问答-------------------- 问题没有描述清楚,也没个例子 看不懂
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,