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;
}