二、数据结构与算法--数组
来源:互联网 发布:淘宝vip报名入口 编辑:程序博客网 时间:2024/05/20 09:26
数组有过工作经验的人应该都很熟悉了,对数组的排序操作无处不在。对于新手来说,简单讲,数组就是一些数据的集合。而我们经常会对数据进行操作,比如插入一条记录、删除一条记录、查找、排序
插入:不用多说大家应该也可以想到,就是往一个数据集合里的固定位置上增加一条记录。
查找:对于查找来说,就会可能遇到遍历,从头开始,一个一个做匹配,至少需要1次,而如果最多则需要N步,查找时间的算法的时间应该是N/2,
删除:删除至少要先找到才能够进行删除,所以至少走了查找的时间,而且需要后边的依次往前移,否则下次删除还得做非空的判断,这样算来删除的时间需要N/2+N/2即N次
不允许重复允许重复查找N/2N插入无比较一次无比较一次删除N/2次比较,N/2次移动N次比较,多于N/2次移动
这样可以试着去分析OC中array操作的次数。
介绍两种查找方法,线性查找和二分查找
那我们假设有一个有序的数组
线性查找,有序和无序数组一样,从第一个开始依次查找
二分查找,二分查找体现了有序数组的好处,比如让你找1-100之间的一个数,猜出来会告诉你比那个数大或小,或者对了,那为了最少的次数,一定先猜50,如果说大了,就说明在1-49之间,那下次就猜24,那最多也只需要7次就可以对了,是不是比线性的效率会高很多;
OC实现二分查找代码
NSMutableArray* testArray = [NSMutableArrayarray]; //目标数组
for (int i =1; i<=100; i++) {
[testArray addObject:[NSNumbernumberWithInt:i]];
}
int find =30; //要找到的数字
//===========二分查找=============
int lower = [[testArrayobjectAtIndex:0]intValue];
int upper = [[testArrayobjectAtIndex:testArray.count-1]intValue];
int count =0; //记录一共查找了多少次
while (1) {
count ++;
int between = (lower + upper) /2;
if (lower > upper) {
NSLog(@"--------no search result-------");
break;
} elseif (find == between) {
NSLog(@"--------search count:%d",count);
break;
} elseif (find > between) {
lower = between +1;
} elseif (find < between) {
upper = between - 1;
}
}
二分查找:与log(N)成正比
- 二、数据结构与算法--数组
- 【数据结构与算法】二 数组反转 reverse
- 数据结构与算法:数组(二)
- 数据结构与算法:数组(二)
- 算法与数据结构 - 数组
- 数据结构与算法:数组
- 数据结构与算法之—数组(二)
- Java数据结构与算法之数组(二)
- 数据结构与算法二
- 数据结构与算法二
- 数据结构与算法系列---数组
- Java数据结构与算法--数组
- 【数据结构与算法】一 数组
- 数据结构与算法之数组
- Javascript数据结构与算法---数组
- 【数据结构与算法01】数组
- 【数据结构与算法分析】数组
- 数据结构与算法JavaScript - 数组
- poj 的搜索【【最近主要目标】】
- 解决Field II以及CVX凸优化工具箱在MATLAB环境下Invalid MEX File Error
- c#使用扫描仪
- C语言fchmod()函数:修改文件的权限
- PHP SPL标准库之SplFixedArray简介
- 二、数据结构与算法--数组
- Linux C第三课
- 左右法则is interesting
- 对MapReduce初步认识
- 简单而又少的数据缓存策略
- io流学习之字节流与字符流之间的转换
- LIST_HEAD_INIT 和 INIT_LIST_HEAD
- linux 下ngnix启动,停止命令总结
- Centos之Lnmp的搭建