数据结构和算法------有序数组和二分查找
来源:互联网 发布:星际淘宝网txt下载 编辑:程序博客网 时间:2024/05/16 15:09
之前研究了下无序数组,这里咱们将数组排序,这样呢可以进行一些个稍微额复杂但是可以提高速度的行为(看吧,咱们开始让程序变快了呵呵)。
有序数组有个好处这就是可以进行2分查找,吼吼这东西很有用,比线性查找快了老么老么多。(当然你得数组长度是2就当我没说)
首先,咱们来讨论2分查找.根据书上说的因为数组是有序的,好我们将数组分成2半,如果查找的大于中间值我们从大的那块继续二分查找(同理如果小于从小的那部分查找).直到找到值.这个搜索速度对于小数据量不明显,但是对于大数据量来说效果很ok.吼吼.
看下代码:
public int find(int searchKey){ int lowerBound=0; int upperBound=nElems-1; int curIn; while(true){ curIn=(lowerBound+upperBound); if(a[curIn]==searchKey){ return curInl }else if(lowerBound>upperBound){ return nElems; }else{ if(a[curIn]<searchkey){ lowerBound=curIn+1; }else{ upperBound=curIn-1; } } }}
这就是那个查找。
我们找的快了,存在一个问题插入,
嗯我们要维持排序这里的插入就稍微慢了点。看看代码吧:
public void insert(int value){ int j; for(j=0;j<nElems;j++){ if(a[j]>value){ break; } for(int k=nElemns;k>j;k--){ a[k]=a[k-1] } } a[j]=value; nElems++;}这里我的插入行为慢了点。
再看删除,删除要先找,再删,再移位。这里呢可以用二分查找了,其他的没有变化,吼吼变快了。
所以呢。这里有序数组比无需数组快了很多,但是删除和插入因为涉及到移位,怎么弄都很慢,有序数组在查找频繁的情况下十分有用,但是插入与删除较为频繁时就无能为力了。
下面要引入一个概念大O法则,这里用来表示运算时间 ,但是这里并不准确只是一个大概的时间概念,但是可以形象的表示了
我们认为数组是一个十分巨大的数组,所以N趋紧与无穷大,这样就有了下面的比较。
基本上对数组有了一个大体上的了解,后面还要研究其他的查找方式带来的性能的提升。或者性能上的差异。
在于使用数组上 无需数组插入很快,查询慢。有序数组查询快而插入慢。所以需要根据情况选择。
同时呢数组不能动态的改变大小, 如果初始创建的比较大那只能浪费资源,少了又不够用。所以这些都需要注意。
当然了可以将旧的数组复制到新的数组中去,使用新的扩容后的数组,这里其实也消耗了资源,需要进一步研究这种情况在何种情况下可以使用。
- 数据结构和算法------有序数组和二分查找
- 数据结构回顾版-java数据结构-有序数组和查找算法
- java数据结构与算法-有序数组二分查找
- 查找:链表顺序查找和有序数组二分查找
- 有序数组和无序数组的二分查找
- 对于有序数组的二分查找算法
- 【数据结构与算法】有序数组二分法查找
- 有序数组\二分查找
- 有序数组二分查找
- 《数据结构与算法》学习笔记3 有序数组与二分查找
- 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组
- [算法]有序二分查找
- 有序数组和二分法查找
- 一步一步复习数据结构和算法基础-顺序查找+二分查找
- Java 数据结构之有序数组,二分查找法
- 数据结构和算法(一):冒泡排序和二分查找
- 算法-分割有序数组后查值-二分查找的变形
- 算法3.2 二分查找(基于有序数组)(algs4)
- 第九周 任务二
- 什么是硬件设计?——成功的硬件设计需要什么?
- 第九周任务一:Complex类的扩展
- 12个小球称3次得到质量不同的那个小球
- IT 男,在大家的眼睛里
- 数据结构和算法------有序数组和二分查找
- Spring bean生命周期UML图示(10级学员 林常禹课堂总结)
- 享元模式
- 动态规划学习二
- 第九周任务(4)
- 第九周 任务三
- 酒店管理系统
- jquery的each方法
- TVP5150视频解码器学习