如何使用c语言编写二分查找算法
折半查找又称为二分查找法,这种查找方法有两个条件限制:
1:必须采用顺序存储结构,对于链表不适合:
2:必须按照关键字大小有序排列;
具体的算法思想:
对于数组进行比较的时候,比较数组大小的中间值,当发现数据大于该中心数据,就在后面的一个区间进行比较,
如果小于该中心数据,就在前面一个区间进行比较,在新的区间里,再次使用之前的大小中间比较法,比较,直到最后找到该数据为止。
操作方法
- 01
写一个二分法的函数名,包含参数。 int FindBySrch(int * ListData,int ListLength,int KeyData);
- 02
写一个循环,在循环中应用折半查找。数组中变换二次区间方法来实现二分查找法: int FindBySrch(int * ListData,int ListLength,int KeyData) { int low = 1; int hight = ListLength; while(low <= hight) { mid = (low+hight)/2; if(KeyData > ListData[mid-1]) low = mid; else if(KeyData < ListData[mid-1]) hight = mid; else return mid; } return 0; }
- 03
对编好的程序进行测试,得出测试结果: #include <stdio.h> int main() { int TestData[5] = {34,35,36,89,96}; int retData = FindBySrch(TestData,5,89); printf("retData:%d\n",retData); return 0; }
数据分析:
- 01
二分法的优点是比较次数少,查找速度快,平均性能好。 缺点是要求查表为顺序表,插入、删除困难, 我们这里来算一下,它的平均查找长度是多少: 估计长度为n:它的平均查找长度为:log2(n+1)-1 :