首页 > 代码库 > 二分查找
二分查找
二分查找的前提必须是数组是有序的。
二分查找的思想为:
在有序的数组中,先取出中间元素。然后判断要查找的值与中间值是否相等, 若相等则直接返回结果,查找成功。
若不相等,则判断中间值是否小于搜索值,若小于要搜索的值,则在中间值的右半区继续找。若大于要搜索的值,则在中间值的左半区继续找。不断重得这个过程。直到找到数组的结尾。
代码如下:
#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; }
二分查找
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。