歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 二分查找之Java實現

二分查找之Java實現

日期:2017/3/1 10:23:20   编辑:Linux編程

環境:Notpad ++ 6.0 + JDK 6.0.24

問題:用Java實現二分查找算法

算法剖析:

二分查找是在一個有序表(數據是按其值由小到大或由大到小依次存放的,這裡我們以值由小到大排列為例)中,每次都與中間的那個元素比較,若相等則查找成功;否則,調整查找范圍,若中間那個元素的值小於待查值,則在表的後一半中查找;若中間那個元素的值大於待查值,則在表的前一半中查找;如此循環,每次只與一半中的一個元素比較,可使查找效率大大提高。

代碼:

  1. import java.util.*;
  2. public class FindSearch{
  3. public static void main(String [] args){
  4. int a[] = {2, 4, 7, 18, 25, 34, 56, 68, 89};
  5. System.out.println("打印原始數據:");
  6. for (int i = 0; i < a.length; ++ i){
  7. System.out.print(a[i] + " ");
  8. }
  9. System.out.println();
  10. System.out.println("請輸入要查找的整數:");
  11. Scanner scan = new Scanner(System.in);
  12. int num = scan.nextInt();
  13. int pos = 0;
  14. pos = binaryFind(a, num);
  15. if (-1 != pos)
  16. System.out.println("所查整數在數組中的位置下標是:" + pos);
  17. else
  18. System.out.println("沒找到待查數據!");
  19. }
  20. public static int binaryFind(int a[],int num){
  21. int low, mid, high;
  22. low = 0;//low是第一個數組元素的下標
  23. high = a.length - 1;//high是最後一個數組元素的下標
  24. mid = (low + high) / 2;//mid是中間那個數組元素的下標
  25. while (low <= high){
  26. if (num == a[mid]){
  27. return mid;
  28. }else if (num > a[mid]){
  29. low = mid + 1;//要找的數可能在數組的後半部分中
  30. mid = (low + high) / 2;
  31. }else{
  32. high = mid - 1;//要找的數可能在數組的前半部分中
  33. mid = (low + high) / 2;
  34. }
  35. }
  36. //mid是數組元素下標,若為-1則表示不存在要查的元素
  37. if (mid != ((low + high) / 2))
  38. return mid;
  39. else
  40. return -1;
  41. }
  42. }

運行效果截圖:

Copyright © Linux教程網 All Rights Reserved