IOS算法(五)之折半查找
来源:互联网 发布:匡恩网络太有钱了 编辑:程序博客网 时间:2024/06/05 01:59
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
折半查找法的两种实现
折半查找法思想:
在有序表中,把待查找数据值与查找范围的中间元素值进行比较,会有三种情况出现:
1) 待查找数据值与中间元素值正好相等,则放回中间元素值的索引。
2) 待查找数据值比中间元素值小,则以整个查找范围的前半部分作为新的查找范围,执行1),直到找到相等的值。
3) 待查找数据值比中间元素值大,则以整个查找范围的后半部分作为新的查找范围,执行1),直到找到相等的值
4) 如果最后找不到相等的值,则返回错误提示信息。
按照二叉树来理解:中间值为二叉树的根,前半部分为左子树,后半部分为右子树。折半查找法的查找次数正好为该值所在的层数。等概率情况下,约为 log2(n+1)-1
代码实现:
// main.m
// 算法----折半查找
// Copyright (c) 2014年 summer2014mht@sina.com. All rights reserved.
#import<Foundation/Foundation.h>
int main(int argc,const char * argv[])
{
int array[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int count = sizeof(array) / sizeof(array[0]);
int target = 10;
int start = 0, end = count - 1, mid =0;
while (start <= end) {
mid = (start + end) /2;
if (array[mid] > target) {
end = mid -1;
} else if (array[mid] < target) {
start = mid +1;
} else {
break;
}
}
if (start <= end) {
printf("[%d]: %d\n", mid, array[mid]);
} else {
printf("not found\n");
}
return 0;
}
- IOS算法(五)之折半查找
- 基础算法之五-查找: 折半查找
- 查找算法之折半查找
- 查找算法之折半查找
- 查找算法之折半查找
- 查找算法之折半查找
- 【查找算法】之折半查找
- java算法之折半查找
- 经典算法之折半查找
- 算法学习之折半查找
- java算法之折半查找
- 数据结构查找算法之折半查找
- 查找算法之折半搜索算法
- java核心技术之折半查找算法
- 1.8算法入门之折半查找
- 算法学习笔记之折半查找
- 查找算法之折半查找(二分查找)
- 查找之折半查找
- SpringMVC常用基础知识【转】
- 两种方法int型转16进制
- java上传文件,压缩,解压保存
- java 求两个数的公约数和公倍数
- android +7与8开头的号码在拨号盘上搜索相互匹配
- IOS算法(五)之折半查找
- 实现LRU CRU
- android 匈牙利语环境下,联系人的姓名顺序颠倒
- 1.认识服务器推送技术
- 屏蔽Home按键
- java正则表达式
- tableView下拉刷新,上拉加载简单应用
- 汉诺塔(递归)
- 一、Camera2 操作android.hardware.Camera 分析