java通过二分法对数组进行高效查找及插入操作
2016-07-06 15:29
435 查看
public class OrderArray { private long[] a; private int nElems; public OrderArray(int max){ a = new long[max]; nElems = 0;//代表数组中元素个数 } public int size(){ return nElems; } public int find(long searchKey){ int beginIndex = 0; int endIndex = nElems - 1; int center; while (true){ center = (beginIndex + endIndex)/2; if(a[center] == searchKey) return center; else if(beginIndex > endIndex){ return nElems; }else { if(a[center] < searchKey) beginIndex = center + 1; else endIndex = center - 1; } } } public boolean insert(long value){ nElems = find(value); if(nElems == 0 || value > a[nElems - 1]){ a[nElems] = value; nElems++; return true; } if(value < a[0]) { for (int k = nElems; k > 0; k--) a[k] = a[k - 1]; a[0] = value; nElems++; return true; } int beginIndex = 0; int endIndex = nElems - 1; int center; while (true){ center = (beginIndex + endIndex)/2; if(a[center] < value){ if(a[center + 1] > value){ for(int k = nElems;k > center + 1;k--) a[k] = a[k - 1]; a[center + 1] = value; nElems++; return true; }else{ beginIndex = center + 1; } }else{ endIndex = center; } } } public boolean delete(long value){ int i = find(value); if(i == nElems) return false; else { for (; i < nElems; i++) a[i] = a[i + 1]; nElems--; return true; } } public void display(){ for(int j = 0;j < nElems;j++) System.out.print(a[j] + " "); System.out.println(" "); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序