1. 程式人生 > >有序表查詢_折半查詢(二分查詢)

有序表查詢_折半查詢(二分查詢)

二分查詢前提是線性表中的記錄初始有序。時間複雜度O(logn)

程式碼如下:

#include <iostream>
using namespace std;

int Binary_Search(int *a, int n, int key)
{
  int mid = 0;
  int high = n-1;
  int low = 0;
  while (low <= high)
  {
	  mid = (low+high)/2;
	  if(key < a[mid])
	  {
		  high = mid-1;
	  }
	  else if (key > a[mid])
	  {
		  low = mid+1;
	  }
	  else if (key == a[mid])
	  {
		  return mid;
	  }
  }
  return -1;//查詢失敗
}

int main()
{
	int a[10] = {1,2,3,4,5,6,7,8,9,10};
	int key = 7;
	cout<<Binary_Search(a, 10, key)<<endl;
	key = 99;
	cout<<Binary_Search(a, 10, key)<<endl;//如果返回-1,則查詢失敗
	getchar();
	return 0;
}

結果: