顺序查找和折半查找
Posted coolcpp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序查找和折半查找相关的知识,希望对你有一定的参考价值。
1. 顺序查找
指从列表头开始顺序搜索列表。
如果项目并非以某种顺序排列,就只能使用顺序查找。如果要搜索的项目不在列表里,就得搜索完所有的项目才能得出该项目在不在列表里面。
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;
}
2. 折半搜索
对于一个已经排序的列表,使用折半搜索的效率要比顺序搜索高很多。
原理是每次取项目中最中间的数和要查找的数进行比较,如果中间的数就是这个数,则只需一次搜索便可找到;
如果搜索的数比中间的数小,则再在下半部分继续折半搜索;
如果搜索的数比中间的数大,则再在上半部分继续折半搜索。直到找到这个数字。
实现代码:
//折半搜索
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;
}
以上是关于顺序查找和折半查找的主要内容,如果未能解决你的问题,请参考以下文章