折半查找
来源:互联网 发布:西安项目数据分析公司 编辑:程序博客网 时间:2024/06/07 05:28
折半查找的查找过程是,先确定待查找记录所在的范围,然后逐步缩小范围直到找到或者找不到该记录为止,和二分法求解有些相似。
若有记录如下
来看看查找32的过程,先比较数组的中间值,因为38>32,我们就知道,该记录可能会在前半部分,那么后半部分就不再考虑了。再次折半,拿27与32比较,得知记录在27与38之间。继续下去就会得到32=32,查找成功。查找开始时,设置low和high,mid=(low+hith)/2,如果a[mid]==记录,查找结束。若a[mid]>记录,记录可能在前半部,令high=mid。继续查找,若a[mid]<记录,可能在后半部,令low=mid。因为每次缩小一半的查找范围,所以效率比顺序查找高,但缺点是只适合有序表,及查找前先排序,且限于顺序存储结构。
代码如下(省略了排序)
//// 折半//// Created by GPH on 13-7-3.// Copyright (c) 2013年 GPH. All rights reserved.//#include <stdio.h>#include <stdlib.h>//返回给定记录在数组中的位置,没有则返回-1int binarySearch(int a[],int low,int high,int e){ int mid = 0; while (low <= high) { mid = (low+high)/2; if (e == a[mid]) { return mid; } else if (e < a[mid]) { high = mid-1; } else { low = mid+1; } } return -1;}int main(){ int b[] = {13,14,23,26,67,89,90}; printf("\n%d\n",binarySearch(b, 0, sizeof(b)/sizeof(b[0])-1, 26)); }
0 0
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 【鸟哥的linux私房菜】学习笔记5
- HTML解析利器HtmlAgilityPack
- hdu 5060 War
- Reflected Cross Site Scripting (XSS)
- Maven插件开发
- 折半查找
- CSU 1374 Restore Calculation(数位dp)
- 找出字符串中第一个只出现一次的字符——来自华为OJ平台测试基础篇
- String.Empty、string=”” 和null的区别
- Linux sqlite3基本命令
- 32位16位8位寄存器及编号
- 在EditPlus中配置PHP调试
- Codeforces 475B Strongly Connected City 强连通裸题
- UI 常用方法总结之--- UIWindow UIView (不断更新中)