資料結構之陣列-二分查詢演算法
阿新 • • 發佈:2019-05-01
package com.shuzhu;
public class MyOrderArray {
private long[] arr;
//表示有效資料長度
private int elements;
public MyOrderArray(){
arr=new long[50];
}
public MyOrderArray(int maxSize){
arr=new long[maxSize];
}
/**
* 新增資料
*/
public void insert(long value){
int i;
for(i=0;i<elements;i++){
if(arr[i]>value){
break;
}
}
for (int j=elements;j>i;j--){
arr[j]=arr[j-1];
}
arr[i]=value;
elements++;
}
/**
* 顯示資料
*/
public void display(){
System.out.print("[");
for (int i=0;i<elements;i++){
System.out.print(arr[i]+" ");
}
System.out.print("]");
}
/**
*查詢資料
*/
public int search(long value){
int i;
for(i=0;i<elements;i++){
if (value==arr[i]){
break;
}
}
if(i==elements){
return -1;
}else {
return i;
}
}
/**
* 根據索引來查
*/
public long get(int index){
if(index>=elements || index<0){
throw new ArrayIndexOutOfBoundsException();
}else{
return arr[index];
}
}
/**
* 刪除資料
*/
public void delete(int index){
if(index>=elements || index<0){
throw new ArrayIndexOutOfBoundsException();
}else{
for(int i=index;i<elements;i++){
arr[index]=arr[index+1];
}
elements--;
System.out.println(arr[index]);
}
}
/**
* 更新資料
*/
public void change(int index,int newvalue){
if(index>=elements || index<0){
throw new ArrayIndexOutOfBoundsException();
}else{
arr[index]=newvalue;
}
}
/**
* 二分查詢資料
*/
public int binarySearch(long value){
//中間值
int middle=0;
//最左邊
int low=0;
//有效資料
int pow=elements;
while (true){
//取平均值
middle=(pow+low)/2;
//查詢值等於中間值,直接返回
if(arr[middle]==value){
return middle;
}else if(low>pow){
return -1;
}else{
if(arr[middle]>value){
//往左邊找
pow=middle-1;
}else{
//往右邊找
low=middle+1;
}
}
}
}
}