(面試題)用折半查找法在一組整形數組中查找某個數據


/**
 * 二分法 :用折半查找法在一組排好序(遞增有序或遞減有序)的值中查找某個數據。
 *
 * 基本思想:
 *
 * 首先將待查數據k與排好序(遞增有序)的一組數據的中間位置上的數據進行比較, 若相等,則查找成功;
 * 若k>a[mid],則待查數據k只可能出現在右半部a[mid+1…n]中,則應在這個右半部中再進行折半查找;
 * 若k<a[mid],則待查數據k只可能出現在左半部a[1…mid-1]中,則應在這個左半部中再進行折半查找;
 * 這樣通過逐步縮小查找范圍,直到找到或找不到該數據k為止。
 *
 * @author Administrator
 *
 */
public class BinarySearch
{

 public static int binarySearch(int[] a, int key)
 {
  if (a == null || a.length == 0)
  {
   return -1;
  }
  // 開始位置
  int first = 0;
  // 結束位置
  int last = a.length - 1;
  // 中間位置
  int mid;
  // 如果開始時,小於則結束.
  while (first < last)
  {
   mid = (first + last) / 2;
   // 如果等於key,返回這個數在數組中的位置.
   if (a[mid] == key)
    return mid;
   // 如果大於key,則在左邊.
   if (a[mid] > key)
    last = mid - 1;
   // 如果小於key,則在右邊
   if (a[mid] < key)
    first = mid + 1;
  }
  return -1;
 }

 public static void main(String[] args)
 {
  int[] a =
  { 1, 3, 4, 5, 8, 7, 9, 11, 15 };
  System.out.println(binarySearch(a, 9));
 }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM