1、二分查找的函数实现
具体思想:有序数组arr[10]左标(left)从下标0开始,而右标从数组长度减1(right)开始,定义中间下标(mid=left+(right-left)/2),查找的元素与中间下标的元素相比,如果
arr[mid]大于查找的元素,那么你的右标就得变成mid-1,一直到左标小于等于右标则数组查找完毕,遍历完所有元素,找到返回下标mid,否则返回-1。
代码如下:
#define _CRT__SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int bin_search(int arr[],int left ,int right,int key)
{
//int arr[]相当于int*arr,指针。函数的实参传给形参的时候,形参是实参的临时拷贝,对 形参的修改不会改变实参的值
int mid=0;
while(left<=right)
{
mid=left+(right-left)/2;
if(arr[mid]>key)
{
right=mid-1;
}
else if(arr[mid]<key)
{
left=mid+1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
int left=0;
int right=sizeof(arr)/sizeof(arr[0])-1;
int key=0;
printf("请输入关键字key:");
scanf("%d",&key);
int ret=bin_search(arr,left right,key)
if(-1==ret)
{
printf("找不到");
}
else
{
printf("找到了,下标是%d\n",ret);
}
system("pause");
return 0;
}