//有序数组类
public class Main{
private int[] a;//数组a,封死在里面,不能让外界访问
private int size;//数组大小
private int elementNumber;//数组当前元素个数
public Main(int n){
a = new int[n];
size = n;
elementNumber = 0;
}
public int getElementNumer(){
return elementNumber;
}
//在从小到大排序的基础上,二分查找
public int find(int value){
int low = 0;
int high = elementNumber - 1;
int mid;
while(true){
mid = (low + high) / 2;
if(a[mid] == value){
return mid;
}else if(low > high){
return elementNumber;//没找到,返回元素个数
}else{
if(a[mid] < value){
low = mid + 1;
}else{
high = mid - 1;
}
}
}
}
//插入,保证从小到大排序
public boolean insert(int value){
//如果数组容量用尽,不可再插入
if(elementNumber >= size){
return false;
}
int i;
for(i = 0; i < elementNumber; i++){
if(a[i] > value){
break;
}
}
for(int j = elementNumber; j > i; j--){
a[j] = a[j-1];//不要用a[j+1] = a[j];防止数组越界
}
a[i] = value;
elementNumber++;
return true;
}
//删除
public boolean delete(int value){
int i = find(value);
if(i == elementNumber){
return false;
}else{
for(int j = i + 1; j < elementNumber; j++){
a[j-1] = a[j];
}
elementNumber--;
return true;
}
}
//打印数组
public void print(){
for(int i = 0; i < elementNumber; i++){
System.out.print(a[i] + " ");
}
System.out.println();
}
//测试
public static void main(String[] args){
int maxSize = 100;
Main orderedArray = new Main(maxSize);
orderedArray.insert(77);
orderedArray.insert(99);
orderedArray.insert(44);
orderedArray.insert(55);
orderedArray.insert(22);
orderedArray.insert(88);
orderedArray.insert(11);
orderedArray.insert(00);
orderedArray.insert(66);
orderedArray.insert(33);
int searchKey = 55;
if(orderedArray.find(searchKey) != orderedArray.getElementNumer()){
System.out.println(searchKey+" found, index = "+orderedArray.find(searchKey));
}else{
System.out.println(searchKey+" not found");
}
orderedArray.print();
orderedArray.delete(00);
orderedArray.delete(55);
orderedArray.delete(99);
orderedArray.print();
}
}
(Java数据结构和算法)数组------二分查找
最新推荐文章于 2019-09-24 22:07:12 发布