有序数组和二分法查找
2015-03-28 23:25
288 查看
<span style="font-size:24px;">package com.liebao07; public class OrdArr { private long[] a; private int nElements; public OrdArr(int max){ a = new long[max]; nElements = 0; } public int size(){ return nElements; } public int find(long searchKey){ int lowBound = 0; int upperBound = nElements-1; int currentIdx; while(true){ currentIdx = (lowBound+upperBound)/2; if(a[currentIdx]==searchKey){ return currentIdx; }else if(lowBound>upperBound){//can not found return nElements;//return size }else{ if(a[currentIdx]<searchKey){ lowBound = currentIdx+1; }else{ upperBound = currentIdx-1; } } } } public void insert(long value){ int j; for(j=0;j<nElements;j++){ if(a[j]>value){ break; } } for(int k=nElements;k>j;k--){ a[k] = a[k-1]; } a[j] =value; nElements++; } public boolean delete(long value){ int j = find(value); if(j==nElements){ return false; }else{ for(int k=j;k<nElements;k++){ a[k] = a[k+1]; } nElements--; return true; } } public void display(){ for(int j=0;j<nElements;j++){ System.out.print(a[j]+" "); } System.out.println(); } }</span>
<span style="font-size:24px;">测试用例:</span>
<span style="font-size:24px;"></span><pre name="code" class="java">package com.liebao07; public class BinarySearchApp { public static void main(String[] args){ int maxSize = 100; OrdArr arr ; arr = new OrdArr(maxSize); arr.insert(72); arr.insert(90); arr.insert(45); arr.insert(126); arr.insert(54); arr.insert(99); arr.insert(144); arr.insert(27); arr.display(); int key = 27; if(arr.find(key)!=arr.size()){ System.out.println("found "+key); }else{ System.out.println("can not found "+key); } arr.delete(27); arr.delete(54); arr.display(); } }输出:
27 45 54 72 90 99 126 144
found 27
45 72 90 99 126 144
有序数组二分查找比较次数:
数据量 比较次数
10 4
100 7
1000 10
10000 14
100000 17
1000000 20
10000000 24
100000000 27
1000000000 30
优点:查找速度比无需数组快
缺点:插入时需要把后面的数据进行移动
与无序数组共同的缺点:删除数据的时候需要把后面的数据往后面移动.
相关文章推荐
- //二分法查找数组中的某个元素(二分法查找时数组元素必须是有序的)
- 查找一个有序数组中的一个元素——二分法
- 有序数组的二分法查找关键字
- 设计一个模板类Sample,用于对一个有序数组采用二分法查找元素下标
- 二分法在有序数组中查找一个数
- 二分法查找有序数组中某元素个数
- (二)有序数组的二分法查找
- 有序数组二分法查找数值
- 二分法查找有序数组中的元素
- 数据结构与算法--有序数组和二分法查找
- 个人练习数据结构之--------------关于线性数据的有序数组以及之上的二分法查找、不同排序方法的学习
- 有序数组的二分法查找关键字
- 二分法实现一个整形有序数组的二分查找
- 二分法查找有序数组
- 二分法查找有序数组
- (笔记)数组 插入式排序法 有序查找二分法
- 二分法在有序数组中进行查找
- 利用二分法查找有序数组中某一元素
- 迭代用在有序数组二分法查找中,递归的二分法查找更简洁,但速度可能会慢一点
- 在一个有序数组中查找具体的某个数字——二分法——函数法