#include"iostream"
usingnamespace std;
intmain()
{
int search(int[], int, int, int);
int array[] = {1,3,6,9,12,15,16,21,24};
int n = sizeof(array)/sizeof(int*);
int elem, index;
cout<<"輸入要查找的元素:";
cin>>elem;
index = search(array, 0, n-1, elem);
cout<<index<<endl;
return 0;
}
//array爲有序數組,elem爲待查找元素,low和high分別是目標數組的第一個和最後一個元素的下標
intsearch(int array[], int low, int high, int elem)
{
//如果沒找到,返回-1
if(low > high)
return -1;
int mid = (low + high)/2;
//如果找到則返回該元素下標
if(elem == array[mid])
return mid;
//去mid左邊元素中去查找
else if(elem < array[mid])
return search(array, low, mid-1, elem);
//去mid右邊元素中去查找
else
return search(array, mid+1, high, elem);
}
運行結果:
D,複雜度分析
(a)時間複雜度:我們可以用一顆二叉樹描述整個查找過程,n個元素高度爲logn,而每次比較過程複雜度都爲O(1),所以折半查找時間複雜度爲O(logn);
(b)空間複雜度:空間複雜度爲O(1)。