有序数组和二分法

来源:互联网 发布:手机淘宝4.0 编辑:程序博客网 时间:2024/06/05 10:37
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 void insert(long value){int j;for(j=0;j<nElems;j++)if(a[j]>value) break;for(int k=nElems;k>j;k--)a[k]=a[k-1];a[j]=value;nElems++;}//二分查找public int find(long searchKey){int lowerBound=0;int upperBound=nElems-1;int curIn;while(true){curIn=(lowerBound+upperBound)/2;if(a[curIn]==searchKey)return curIn;else if(lowerBound>upperBound)//没有找到return nElems;//返回大于最大索引整数else{if(a[curIn]<searchKey)lowerBound=curIn+1;else upperBound=curIn-1;}}}public boolean delete(long value){int j=find(value);if(j==nElems){return false;}else{for(int k=j;k<nElems;k++){a[k]=a[k+1];}nElems--;return true;}}public void display(){for(int i=0;i<nElems;i++){System.out.print(a[i]+" ");}System.out.println();}}


主程序

public class OrderedApp {public static void main(String[] args){int maxSize=100;OrderArray array;array=new OrderArray(maxSize);array.insert(77);array.insert(99);array.insert(44);array.insert(55);array.insert(22);array.insert(88);array.insert(11);array.insert(0);array.insert(66);array.insert(33);int searchKey=55;if(array.find(searchKey)!=array.size())System.out.println("找到了"+searchKey);else System.out.println("没找到"+searchKey);array.display();array.delete(0);array.delete(55);array.delete(99);array.display();}}

0 0