vlambda博客
学习文章列表

查找算法-Search,二分查找

查找过程:

将待查关键字与有序表中间位置的记录进行比较,若相等,查找成功,若小于,则只可能在有序表的前半部分,若大于则只可能在有序表的后半部分,因此,经过一次比较,就将查找范围缩小一半,这样一直进行下去直到找到所需记录或记录不在查找表中。


二分查找特点

1、效率高。
2、平均查找性能和最坏性能接近。 最坏 查找次数:   log 2 n+1。 平均时间复杂度: log n
3、二分查找对 查找表有要求, 必须是有序线性而且必须是顺序表,不能是链式表。


代码

#include <stdio.h>#include <stdlib.h>#define SIZE 8
int Search_Binary(int* a, int key);int main(void){ int a[SIZE] = { 2,3,4,5,6,78,99,100 }; int i = Search_Binary(a, 100); printf("该元素数组下标为:%d", i);
return 0;}int Search_Binary(int* a,int key){ int low = 0; //记录首位为最低下标 int high = SIZE - 1; //记录末尾为最高下标
while (low <= high) { int mid = (low + high);//二分,记录中间坐标
if (key < a[mid]) //若查找值比中值小 high = mid-1; //最高下标调整为中间坐标的前一位 else if (key > a[mid]) //若查找值比中值大 low = mid+1; //最低下标调整为中间坐标的后一位 else if(key==a[mid]) //查找成功 返回下标值 return mid; } return 0; //循环结束后程序仍没有结束,则返回0表明查找失败}