二分查找
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找相关的知识,希望对你有一定的参考价值。
二分查找的前提必须是数组是有序的。
二分查找的思想为:
在有序的数组中,先取出中间元素。然后判断要查找的值与中间值是否相等, 若相等则直接返回结果,查找成功。
若不相等,则判断中间值是否小于搜索值,若小于要搜索的值,则在中间值的右半区继续找。若大于要搜索的值,则在中间值的左半区继续找。不断重得这个过程。直到找到数组的结尾。
代码如下:
#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; }
以上是关于二分查找的主要内容,如果未能解决你的问题,请参考以下文章