二分查找
来源:互联网 发布:找不到男朋友 知乎 编辑:程序博客网 时间:2024/06/06 02:37
二分查找的前提条件是数组有序,以整型升序数组为例
思想:在一个有序数组中(升序)查找某个值,每次将数组从中间一分为二,取头head,中间mid,尾tail。若mid值大于待查找的值,则把tail重新定位在mid的位子上,对从head到tail的“新”数组进行下一次二分;若mid值小于待查找的值,就把head重新定位在mid的位子上,对从head到tail的“新”数组进行下一次查找。
好的,现在开始写代码。
public static int BiSeach(int[] a, int n,int val) { int head, tail, mid; head = 0; tail = n; int i; for(i=0;i<tail ;i++) { } }//这是第一段失败了的代码
for应该怎么去运行呢?
看来这样不行,得换一种写法。
static void Main(string[] args) { int[] a=new int []{0,1,2,3,4,5,6,7}; // int head, tail, mid; int val; Console.WriteLine("Input a number "); val = Convert.ToInt32(Console.ReadLine()); int result = BiSeach(a, 8, val); if (result>=0) Console.WriteLine("found at a[{0}]", result); Console.ReadKey(); } public static int BiSeach(int[] a, int n,int val) { int head, tail, mid; head = 0; tail = n; int i; while (head <= tail) { mid = (head + tail) / 2; if (val == a[mid]) return mid; else if (a[mid] > val) tail = mid; else head = mid; } Console.WriteLine("Not found!"); return -1; }这次看上去没错了吧?
经过运行,0~7确实都能找出来,但是这样就真的没有问题了么。。。。
于是,输入了8之后,它死循环了。
又经过了一番改动,终于没问题了。。。。
class Program { static void Main(string[] args) { int[] a=new int []{0,1,2,3,4,5,6,7}; // int head, tail, mid; int val; Console.WriteLine("Input a number "); val = Convert.ToInt32(Console.ReadLine()); int result = BiSeach(a, 8, val); if (result>=0) Console.WriteLine("found at a[{0}]", result); else Console.WriteLine("Not found!"); Console.ReadKey(); } public static int BiSeach(int[] a, int n,int val) { int head, tail, mid; head = 0; tail = n-1; int i; while (head <=tail) { mid = head + (tail-head) / 2;//判断到底有没有 if (val == a[mid]) return mid; else if (a[mid] > val) tail = mid-1;//mid不是,可以排除掉了 else head = mid+1; } return -1; } }
0 0
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- SDUT 第12周周赛
- iptables,nftables sucks?
- Math中常用方法
- Ubuntu 拨号上网设置
- bzoj 1465: 糖果传递
- 二分查找
- c# Xml
- 自己
- 有序链表的合并
- 兔子--背景的圆角设置
- Hack Like a Pro: How to Crack Passwords, Part 3 (Using Hashcat)
- nyoj-XX和OO
- HDU_4770 Lights Against Dudely 状压+剪枝
- 我的博客也开通了,誓要戒骄,戒躁,每天学习,每天总结