标签:str 列表 lse turn 排序 ++ array 中间 搜索
指从列表头开始顺序搜索列表。
如果项目并非以某种顺序排列,就只能使用顺序查找。如果要搜索的项目不在列表里,就得搜索完所有的项目才能得出该项目在不在列表里面。
int seq(int *array, int low, int high, int key)
{
for(int i = low; i < high; i++)
{
if(array[i] == key)
return i;
}
return -1;
}
对于一个已经排序的列表,使用折半搜索的效率要比顺序搜索高很多。
原理是每次取项目中最中间的数和要查找的数进行比较,如果中间的数就是这个数,则只需一次搜索便可找到;
如果搜索的数比中间的数小,则再在下半部分继续折半搜索;
如果搜索的数比中间的数大,则再在上半部分继续折半搜索。直到找到这个数字。
//折半搜索
int binary(int *array, int low, int high, int key)
{
while(low <= high)
{
//中间切一刀
int mid = (low + high) / 2;
//正好是中间这个数
if(key == array[mid])
return mid;
//数比中间的数大,则在下半部分再切一刀缩小范围
else if(key > array[mid])
low = mid + 1;
//数比中间的数小,则在上半部分再切一刀缩小范围
else
high = mid - 1;
}
return -1;
}
使用递归实现折半搜索:
//折半搜索 递归表示
int binary_rec(int *array, int low, int high, int key)
{
if(low < high)
{
int mid = (low + high) / 2;
if(key == array[mid])
return mid;
else if(key > array[mid])
return binary_rec(array, mid + 1, high, key);
else
return binary_rec(array, low, mid - 1, key);
}
else
return -1;
}
标签:str 列表 lse turn 排序 ++ array 中间 搜索
原文地址:https://www.cnblogs.com/coolcpp/p/search.html