顺序查找、折半查找
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
顺序查找与折半查找的比较
顺序查找简单的从头到尾的查找,对数据没有要求,而折半查找要求查找的数据是按顺序排列的,然后找中间数,若中间数大,则把中间数当成最后一个数找他们的中间数。反之,则把中间数当成第一个数。找他们的中间数。这样,一直找下去,直到找到或者中间数和第一个数或者最后一个数相等。它较顺序查找,效率较高。
依据顺序查找算法和折半查找算法的特点,对下面的两个查找表选择一个合适的算法,设计出完整的C源程序。并完成问题:
查找表1:{ 8,15,19,26,33,41,47, 52,64,90 },查找key = 41
查找表2:{12,76,29,15,62,35,33,89,48,20 },查找key =35
查找key=41的算法:比较次数:
查找key=35的算法:比较次数:
查找key=41的算法:折半查找法比较次数:3次
查找key=35的算法:顺序查找法比较次数:6次
顺序查找算法实现代码:
int SequenceSearch(int a[], int n, int key)
{ int i=0,cnt=0;
for (i=0; i {cnt++; if (a[i] == key) {printf("\nSequencial Search compare times:%d",cnt); return key ;} } return -1; } l折半查找算法实现代码: int BinarySearch(int a[], int n, int key) { int low=0,high=n-1,mid=0; int cnt=0; while (low<=high) { cnt++; mid = (low+high)/2; printf("\ncompare %d with %d",a[mid],key); if (a[mid] == key) {printf("\nSequencial Search compare times:%d",cnt); return key; } if (a[mid]>key) {high=mid-1;} else {low=mid+1;} } return -1;} /*折半查找法例题1*/ #include void main() { int a[10]={8,18,27,42,47,50,56,68,95,120}; int b=8; //要查找的数 int min=0; int max=9; int mid=(min+max)/2; while(b!=a[mid]) { if(b>a[mid]) {min=mid;mid=(min+max)/2;}