数组最简单的查找方式就是线性查找,线性查找需要的时间和数组中的数据项数成正比(O(N));有序数组可以使用二分查找,二分查找需要的时间与数组中的数据项的个数的对数成正比(O(log(N))),显然数据项越多,二分查找的时间优势更明显。
public class OrderArray {
private int[] array;
private int index;
public OrderArray(int size){
array = new int[size];
index = 0;
}
public int size(){
return index;
}
public boolean insert(int value){
int i = 0;
for(i =0;i<index;i++){
if(array[i]>value){
break;
}
}
for(int j=index;j>i;j--){
array[j]=array[j-1];
}
array[i]=value;
if(index<array.length)
index++;
return true;
}
//二分查找
public int find(int value){
int lowerBound=0;
int upperBound=index -1;
int curIn;
while(true){
curIn = (lowerBound+upperBound)/2;
if(array[curIn]>value){
upperBound = curIn-1;
}else if (array[curIn]<value){
lowerBound= curIn+1;
}else
return curIn;
if(lowerBound >upperBound){
return index;
}
}
}
public boolean delete(int value){
int i = find(value);
if(i == index){
return false;
}else{
for(;i<index;i++){
array[i]=array[i+1];
}
index--;
return true;
}
}
public void display(){
for (int i = 0; i < index; i++) {
System.out.println(array[i]);
}
}
public static void main(String args[]){
int maxSize = 100; // array size
OrderArray arr; // reference to array
arr = new OrderArray(maxSize); // create the array
arr.insert(77); // insert 10 items
arr.insert(99);
arr.insert(44);
arr.insert(55);
arr.insert(22);
arr.insert(88);
arr.insert(11);
arr.insert(00);
arr.insert(66);
arr.insert(33);
int searchKey = 55; // search for item
if( arr.find(searchKey) != arr.size() )
System.out.println("Found " + searchKey);
else
System.out.println("Can't find " + searchKey);
arr.display(); // display items
arr.delete(00); // delete 3 items
arr.delete(55);
arr.delete(99);
arr.display();
}
}