一、实验目的
理解二分查找的原理和特点;理解二分查找的代码。
二、实验内容
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
二分查找方法:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
通过在序列 6, 12, 15, 18, 22, 25, 28, 35, 46, 58, 60 中寻找 12 和 15 的过程,了解二分查找的运行流程。
三、实验要点
二分查找法是高效的查找方法,但前提是所有顺序必须按照关键字来排序,顺序存储。
四、代码
#include <stdio.h> int BinarySearch(int v[ ], int n, int x) { int low=0, high=n-1, mid; while (low <= high) { mid = (low+high)/2; if (x < v[mid]) high = mid - 1; else if (x > v[mid]) low = mid + 1; else /* found match */ return mid; } return -1; /* no match */ } int main() { int i, n, v[10]= { 1, 3, 4, 5, 12, 16, 19, 20, 21, 33}; scanf("%d", &n); i = BinarySearch(v, 10, n); /* 在长度为10的数组 v 中搜索 n */ if (i==-1) printf("Not Found\n"); else printf("%d is at position %d\n", n, i); return 0; }
五、实验小结
总结实验过程中遇到的问题及解决办法,不少于50字。