二分法查找

转载 2012年03月26日 09:41:20
Java代码 复制代码 收藏代码
  1. import java.util.Arrays;   
  2.   
  3. /**  
  4.  *   
  5. * @项目名称:Test     
  6. * @类名称:BinarySearch     
  7. * @类描述:   二分法查找  
  8. * @创建人:Ansj     
  9. * @创建时间:2011-9-13 下午02:53:47    
  10. * @修改备注:     
  11. * @version      
  12. *  
  13.  */  
  14. public class BinarySearch {   
  15.     public static void main(String[] args) {   
  16.         int[] ints = {12,123,21,123,1,432,23,42,3,123,124,3,5435,66,456554,435,423,42,1} ;   
  17.            
  18.         int find = 66 ;   
  19.            
  20.         //先对数组排序   
  21.         Arrays.sort(ints) ;   
  22.            
  23.         for (int i = 0; i < ints.length; i++) {   
  24.             new BinarySearch().search(ints, ints[i]) ;   
  25.         }   
  26.            
  27.            
  28.     }   
  29.        
  30.     public void search(int[] ints , int find){   
  31.         search(ints,0,ints.length,find) ;   
  32.     }   
  33.        
  34.        
  35.     public void search(int[] ints , int start , int end , int find){   
  36.         if(ints[(start+end)/2]==find){   
  37.             System.out.println((start+end)/2);   
  38.         }else if(ints[(start+end)/2] > find){   
  39.             search(ints , start , (start+end)/2 , find) ;   
  40.         }else{   
  41.             search(ints , (start+end)/2 , end , find) ;   
  42.         }   
  43.     }   
  44.        
  45. }  
还 你的二分法当赋值给find的参数 在数组ints里没有的话,就会报异常,我把你的程序改了下 就能用了 谢谢!
public static void main(String[] args) {
int[] ints = { 12, 12, 11, 9, 10, 5, 7, 1, 1 };
int start = 0;
int end = ints.length;

int find = 5;

// 先对数组排序
Arrays.sort(ints);

new Test().search(ints, start, end, find);
}

public int search(int[] ints, int start, int end, int find) {
int flag = 0;
if (ints[(start + end) / 2] == find) {
System.out.println(ints[(start + end) / 2]);
flag = 1;
return flag;
} else if ((end - start) <= 1) {
if (ints[start] == find) {
System.out.println(ints[start]);
flag = 1;
return flag;
} else if (ints[end] == find) {
System.out.println(ints[end]);
flag = 1;
return flag;
} else {
flag = 0;
return flag;
}
} else if (ints[(start + end) / 2] > find) {
if (start < (start + end) / 2) {
end = (start + end) / 2;
search(ints, start, end, find);
} else {
flag = -1;
return flag;
}

} else {
if ((start + end) / 2 < end) {
start = (start + end) / 2;
search(ints, start, end, find);
} else {
flag = -1;
return flag;
}

}

return flag;
}

其实很早以前写过..这次想用递归写还是没写好..一次写完也没仔细测呵呵..谢谢你提的意见...

这是标准的二分代码..和jdk写的一样


Java代码 复制代码 收藏代码
  1. public static void main(String[] args) {   
  2.         int[] array = { 12345678910141522232 };   
  3.         for (int i = 0; i < array.length; i++) {   
  4.             System.out.println(erFen(array,array[i])) ;   
  5.         }   
  6.     }   
  7.   
  8.     public static boolean erFen(int[] array, int num) {   
  9.         int begin = 0;   
  10.         int end = array.length - 1;   
  11.   
  12.         while (begin <= end) {   
  13.             int mid = (begin + end) / 2;   
  14.             if (array[mid] > num) {   
  15.                 end = mid -1 ;   
  16.             } else if (array[mid] < num) {   
  17.                 begin = mid +1 ;   
  18.             } else {   
  19.                 return true;   
  20.             }   
  21.         }   
  22.   
  23.         return false;   
  24.     }  
1 楼 liubing539 2011-09-15  
还 你的二分法当赋值给find的参数 在数组ints里没有的话,就会报异常,我把你的程序改了下 就能用了 谢谢!
public static void main(String[] args) {
int[] ints = { 12, 12, 11, 9, 10, 5, 7, 1, 1 };
int start = 0;
int end = ints.length;

int find = 5;

// 先对数组排序
Arrays.sort(ints);

new Test().search(ints, start, end, find);
}

public int search(int[] ints, int start, int end, int find) {
int flag = 0;
if (ints[(start + end) / 2] == find) {
System.out.println(ints[(start + end) / 2]);
flag = 1;
return flag;
} else if ((end - start) <= 1) {
if (ints[start] == find) {
System.out.println(ints[start]);
flag = 1;
return flag;
} else if (ints[end] == find) {
System.out.println(ints[end]);
flag = 1;
return flag;
} else {
flag = 0;
return flag;
}
} else if (ints[(start + end) / 2] > find) {
if (start < (start + end) / 2) {
end = (start + end) / 2;
search(ints, start, end, find);
} else {
flag = -1;
return flag;
}

} else {
if ((start + end) / 2 < end) {
start = (start + end) / 2;
search(ints, start, end, find);
} else {
flag = -1;
return flag;
}

}

return flag;
}

实现二分法查找(递归实现)

递归实现二分法查找:#include #include void main(){ int doubleCheck(int a, int b, int c, int d[]); int d[]...
  • haha_kai
  • haha_kai
  • 2016年11月27日 09:12
  • 817

Scala、PHP、Golang 二分法查找

二分法查找是比较常见的查询算法。对于一个有序序列,注意:是有序序列,找出其中某一个元素,通常的做法是序列中拿出一个一个的元素,每个元素和所需元素作比较,如果是想要的结果,就把元素的序号输出来。例如有序...
  • i6448038
  • i6448038
  • 2016年03月23日 18:22
  • 789

二分法查找C++实现

#include #include using namespace std;int binary_seacher(vector &v, int target) { if (v.empty(...
  • qq_16209077
  • qq_16209077
  • 2016年09月27日 15:28
  • 14505

二分法查找C++程序

#define size 5 #include using namespace std; int main() { int i,j; float t...
  • phenixyf
  • phenixyf
  • 2014年12月18日 11:28
  • 937

写了个二分法查找函数

今日有csdn的网友问到这个问题,所以写了这个函数,如下:二分法查找函数功能:在数组中查找指定的值返回:若查到指定值则返回相应的索引,否则返回-1程序:by Tang 22:06 2005-4-27F...
  • tanaya
  • tanaya
  • 2005年04月27日 22:15
  • 3707

实现二分法查找——java实现

java实现二分法查找,前提:要求待查找的数组已经是按照升序排好的。 package test; public class test { public static void main(...
  • uniquewonderq
  • uniquewonderq
  • 2015年09月10日 00:07
  • 2637

算法之二分法查找

二分法检索(binary search)又称折半检索,二分法检索的基本思想是设字典中的元素从小到大有序地存放在数组(array)中, 首先将给定值key与字典中间位置上元素的关键码(key)比较,如...
  • huangjuani
  • huangjuani
  • 2015年06月17日 09:04
  • 9348

给定范围的二分法查找

折半查找也称为二分查找,优点是比较次数少,效率高。接下来先贴一段关于给定范围的折半查找代码参考 #define _CRT_SECURE_NO_WARNINGS 1 #include #in...
  • sssssuuuuu666
  • sssssuuuuu666
  • 2017年03月25日 11:25
  • 260

二分法查找的Python实现

代码如下: #!/usr/bin/env python # coding=utf-8 def BinarySearch(t,x): t.sort() #对列表进行排序,列表是有序的,是二分...
  • fcts1230
  • fcts1230
  • 2015年09月27日 22:05
  • 405

二分法查找的两种方法

转载自http://blog.csdn.net/h971379154/article/details/48845355 #include int BinSearch_Recursion(int ...
  • u014186096
  • u014186096
  • 2015年10月01日 11:36
  • 988
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二分法查找
举报原因:
原因补充:

(最多只允许输入30个字)