您的位置:首页 > 编程语言 > C语言/C++

C语言-二分查找(折半查找)算法

2016-04-03 21:42 211 查看
1.折半查找算法

原理:取中间元素与查找元素进行比较,如果查找元素比中间元素大,则在中间元素右边查找,如果查找元素比中间元素小,则在中间元素的左边查找。

代码例子:

#include <stdio.h>
/**
*  折半查找函数
*
*  @param arr   数组
*  @param len   数组长度
*  @param value 查找元素
*
*  @return 返回查找元素的位置
*/
int searchItem(int arr[],int len, int value){
int low = 0,high = len-1,mid;
while (low <= high) {
mid = (low + high)/2;
if (value > arr[mid]) {
low = mid+1;
}else if (value < arr[mid]){
high = mid - 1;
}else{
return mid;
}
}
return -1;
}

int main(int argc, const char * argv[]) {
//数组必须是有序数组
int a[10] = {1,2,31,45,52,62,73,86,90,100};
//查找86元素
int l = searchItem(a,10,86);
printf("loc = %d\n",l);
return 0;
}


输出结果:

loc = 7
Program ended with exit code: 0
折半插入对有序数组

代码实现:

/**
*  插入数据返回地址
*
*  @param arr   数组
*  @param len   数组长度
*  @param value 要插入的数
*
*  @return <#return value description#>
*/
int insertItemLoc(int arr[],int len, int value){
int low = 0,high = len-1,mid;
while (low <= high) {
mid = (low + high)/2;
if (value > arr[mid]) {
low = mid+1;
}else if (value < arr[mid]){
high = mid - 1;
}else{
return mid+1;
}
}
return low;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: