package ch01;
public class TestMyArray {
public static void main(String[] args) {
// MyArray array = new MyArray();
// array.insert(19);
// array.insert(20);
// array.insert(21);
// array.insert(23);
// array.insert(25);
// array.insert(20);
// array.insert(33);
// //array.display();
// System.out.println(array.search(20));
//System.out.println(array.get(2));
//System.out.println(array.get(3));
//array.change(0, 100);
//System.err.println(array.get(0));
// System.err.println(array.get(3));
//array.delete(3);
//array.display();
//测试有序数组
MyOrderArray array = new MyOrderArray();
array.insert(30);
array.insert(20);
array.insert(50);
array.insert(45);
array.insert(18);
array.display();
System.out.println(array.binarySearch(30));
}
}
package ch01;
public class MyArray {
private long[] arr;
//表示数组长度
private int elements;
public MyArray(){
arr = new long[50];//默认初始化长度为50
}
public MyArray(int maxsize){
arr = new long[maxsize];
}
/**
* 添加数据(数组没有顺序)
*/
public void insert(long value){
arr[elements]=value;
elements++;
}
/**
* 显示数据
*/
public void display(){
for(int i =0;i<elements;i++){
System.out.println(arr[i]);
}
}
/**
* 查找数据
*/
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 change( int index,int newvalue){
if(index >=elements || index <0){
throw new ArrayIndexOutOfBoundsException();
}
else{
arr[index] = newvalue;
}
}
/**
* 删除数据
*/
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 --;
for(int i = index; i<elements;i++){
arr[index]= arr[index+1];
elements --;
}
}
}
}
package ch01;
public class MyOrderArray {
private long[] arr;
//表示数组长度
private int elements;
public MyOrderArray(){
arr = new long[50];//默认初始化长度为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(){
for(int i =0;i<elements;i++){
System.out.println(arr[i]);
}
}
/**
* 查找数据
*/
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 change( int index,int newvalue){
if(index >=elements || index <0){
throw new ArrayIndexOutOfBoundsException();
}
else{
arr[index] = newvalue;
}
}
/**
* 删除数据
*/
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 --;
for(int i = index; i<elements;i++){
arr[index]= arr[index+1];
elements --;
}
}
}
/**
* 二分法查找数据
*/
public int binarySearch(long value){
int middle =0;
int low = 0;
int pow = elements;
while(true){
middle = (low+pow)/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;
}
}
}
}
}