算法剖析:

二分查找是在一个有序表(数据是按其值由小到大或由大到小依次存放的,这里我们以值由小到大排列为例)中,每次都与中间的那个元素比较,若相等则查找成功;否则,调整查找范围,若中间那个元素的值小于待查值,则在表的后一半中查找;若中间那个元素的值大于待查值,则在表的前一半中查找;如此循环,每次只与一半中的一个元素比较,可使查找效率大大提高。

      

二分查找最接近的数字java 二分查找java实现_java

 代码:

 


[java]  
    view plain 
    copy 
    
 
    
 
  
1. import java.util.*;  
2.   
3. public class FindSearch{  
4.   
5. public static void main(String [] args){  
6.           
7.           
8. int a[] = {2, 4, 7, 18, 25, 34, 56, 68, 89};  
9. "打印原始数据:");  
10. for (int i = 0; i < a.length; ++ i){  
11. " ");  
12.         }  
13.         System.out.println();  
14.           
15. "请输入要查找的整数:");  
16. new Scanner(System.in);  
17. int num = scan.nextInt();  
18. int pos = 0;  
19.         pos = binaryFind(a, num);  
20. if (-1 != pos)  
21. "所查整数在数组中的位置下标是:" + pos);  
22. else  
23. "没找到待查数据!");  
24.     }  
25.       
26. public static int binaryFind(int a[],int num){  
27.       
28. int low, mid, high;  
29.           
30. 0;//low是第一个数组元素的下标  
31. 1;//high是最后一个数组元素的下标  
32. 2;//mid是中间那个数组元素的下标  
33.           
34. while (low <= high){  
35.           
36. if (num == a[mid]){  
37. return  mid;  
38. else if (num > a[mid]){  
39. 1;//要找的数可能在数组的后半部分中  
40. 2;  
41. else{  
42. 1;//要找的数可能在数组的前半部分中  
43. 2;  
44.             }  
45.         }  
46.           
47.           
48. //mid是数组元素下标,若为-1则表示不存在要查的元素  
49. if (mid != ((low + high) / 2))  
50. return mid;  
51. else  
52. return -1;  
53.               
54.     }  
55. }


运行效果截图:

 

二分查找最接近的数字java 二分查找java实现_数组元素_02


    算法剖析:

二分查找是在一个有序表(数据是按其值由小到大或由大到小依次存放的,这里我们以值由小到大排列为例)中,每次都与中间的那个元素比较,若相等则查找成功;否则,调整查找范围,若中间那个元素的值小于待查值,则在表的后一半中查找;若中间那个元素的值大于待查值,则在表的前一半中查找;如此循环,每次只与一半中的一个元素比较,可使查找效率大大提高。

      

二分查找最接近的数字java 二分查找java实现_java

 代码:

 


[java]  
    view plain 
    copy 
    
 
    
 
  
1. import java.util.*;  
2.   
3. public class FindSearch{  
4.   
5. public static void main(String [] args){  
6.           
7.           
8. int a[] = {2, 4, 7, 18, 25, 34, 56, 68, 89};  
9. "打印原始数据:");  
10. for (int i = 0; i < a.length; ++ i){  
11. " ");  
12.         }  
13.         System.out.println();  
14.           
15. "请输入要查找的整数:");  
16. new Scanner(System.in);  
17. int num = scan.nextInt();  
18. int pos = 0;  
19.         pos = binaryFind(a, num);  
20. if (-1 != pos)  
21. "所查整数在数组中的位置下标是:" + pos);  
22. else  
23. "没找到待查数据!");  
24.     }  
25.       
26. public static int binaryFind(int a[],int num){  
27.       
28. int low, mid, high;  
29.           
30. 0;//low是第一个数组元素的下标  
31. 1;//high是最后一个数组元素的下标  
32. 2;//mid是中间那个数组元素的下标  
33.           
34. while (low <= high){  
35.           
36. if (num == a[mid]){  
37. return  mid;  
38. else if (num > a[mid]){  
39. 1;//要找的数可能在数组的后半部分中  
40. 2;  
41. else{  
42. 1;//要找的数可能在数组的前半部分中  
43. 2;  
44.             }  
45.         }  
46.           
47.           
48. //mid是数组元素下标,若为-1则表示不存在要查的元素  
49. if (mid != ((low + high) / 2))  
50. return mid;  
51. else  
52. return -1;  
53.               
54.     }  
55. }

运行效果截图:

 

二分查找最接近的数字java 二分查找java实现_数组元素_02