标签:c
二分查找的前提必须是数组是有序的。
二分查找的思想为:
在有序的数组中,先取出中间元素。然后判断要查找的值与中间值是否相等, 若相等则直接返回结果,查找成功。
若不相等,则判断中间值是否小于搜索值,若小于要搜索的值,则在中间值的右半区继续找。若大于要搜索的值,则在中间值的左半区继续找。不断重得这个过程。直到找到数组的结尾。
代码如下:
#include <stdio.h>
/*
二分查找
1,34,56,7,8,90,456,3,234,4,54,23,45
在表中查找值为54的数据元素。
*/
int biSearch(int arr[],size_t len,int search);
int main()
{
int arr[] = {1,34,56,7,8,90,456,3,234,4,54,23,45};
int count = sizeof(arr)/sizeof(arr[0]);
int search = 54;
int result = biSearch(arr,count,search);
if(result >= 0){
printf("%d 在 arr中,索引是:%d",search,result);
}else{
printf("%d 不在 arr中",search);
}
}
/*
二分查找
*/
int biSearch(int arr[],size_t len,int search)
{
int mid = 0,midvalue = 0, flag = -1,low = 1,high = len;
while( low <= high ){
/*
先遍历数组,每次取中间值,判断是否等于搜索值,如果不是再判断是从左边还是右边
继续搜索
*/
mid = (low+high)/2;
midvalue = arr[mid];
if(search == midvalue ){
flag = mid;
break;
}else if(midvalue > search ){
high = mid-1;
}else if(midvalue < search ){
low = mid+1;
}
}
return flag;
}
标签:c
原文地址:http://lampzxr.blog.51cto.com/3990989/1896148