/*
二分查找
二分查找的前提: 1 集合有序;2 该集合是连续存储结构
时间复杂度 O(log2n) 最大查找次数log₂n + 1 最小查找次数 1
*/
#include <stdio.h>
#define Element int
#define Count 127
int main()
{
Element arr [Count];
int i = 0;
for(i = 0; i < Count; i++)
{
arr[i] = i;
}
for(i = 0; i < Count; i++)
{
Search(i, arr, Count);
}
return 0;
}
//查找到返回下标,查找不到返回-1
int Search(Element value, Element arr[], int lenght)
{
int count = 1;
int mid;
int left = 0;
int right = lenght - 1;
printf("\n");
while(left <= right)
{
mid = (left + right) / 2;
printf("查找数值 %d ,第 %d 次查找,left = %d, mid = %d, right = %d,当前值 %d\n",value, count++,left, mid, right,arr[mid]);
if(value == arr[mid])
{
return mid;
}
else if(value < arr[mid])
{
right = mid - 1;
}
else if(value > arr[mid])
{
left = mid + 1;
}
}
printf("没找到\n");
return -1;
}
二分查找
最新推荐文章于 2023-01-17 17:48:56 发布