目录
概述
折半查找:时间复杂度:,空间复杂度:
元素存储在数组中;
有序排列。
非递归法
int binarySearch(const int arr[], int search_val, int low, int high)
{
while (low <= high)
{
int middle = low + (high - low) / 2;
if (search_val == arr[middle])
{
return middle; //找到后返回下标
}
else if (search_val < arr[middle])
{
high = middle - 1;
}
else
{
low = middle + 1;
}
}
return -1; //没有找到
}
递归法
int binarySearchRecursive(int *arr, int search_val, int low, int high)
{
if(low <= high)
{
middle = low + (high - low) / 2;
if (arr[middle] == search_val)
{
return middle;
}
else if ( search_val < arr[middle])
{
return binarySearchRecursive(arr, search_val, low, middle-1);
}
else
{
return binarySearchRecursive(arr, search_val, middle+1, high);
}
}
else
return -1;
}
主函数
int main()
{
int a[] = {1,3,4,6,7,9,12,15};
int n = sizeof(a) / sizeof(int);
int searchVal = 12;
int result1, result2;
result1 = binarySearch(a, searchVal, 0, n-1);
result2 = binarySearchRecursive(a, searchVal, 0, n-1);
}