使用二分查找的前提时数据集合有序
#include <stdio.h>
#include <stdbool.h>
bool SortRule(int a,int b)
{
return a>b;
}
void InsertSort(int arr[],int L)
{
int j,i,tmp;
for(i=1;i<L;i++)
{
if(SortRule(arr[i-1],arr[i]))
{
tmp=arr[i];
for( j=i-1;j>=0&&arr[j]>tmp;j--)
{
arr[j+1]=arr[j];
}
arr[j+1]=tmp;
}
}
}
//二分查找 前提时有序数据集合
int search(int arr[],int L,int target)
{
int l=0;
int r=L-1;
while(l<=r)
{
int mid=l+(r-l)/2;
if(arr[mid]>target)
{
r=mid-1;
}
else if(arr[mid]<target)
{
l=mid+1;
}
else
{
return mid;
}
}
return -1;
}
int main(void)
{
int arr[]={1,99,6,8,3,7};
int L=sizeof(arr)/sizeof(arr[0]);
InsertSort(arr,L);
int ans=search(arr,L,55);
if(ans!=-1)
{
printf("找到在数组下标 %d 位置",ans);
}else
{
printf("没找到");
}
return 0;
}