数组
package day_1;
//封装数组
public class MyArray {
private long[] arr;
//表示有效数据
private int elements;
public MyArray() {
arr = new long[50];
}
public MyArray(int maxsize) {
arr = new long[maxsize];
}
/**
* 添加数据
* */
public void insert(long value) {
arr[elements] = value;
elements++;
}
/**
* 显示数据
* */
public void display() {
System.out.print("[");
for(int i=0;i<elements;i++) {
System.out.print(arr[i]+",");
}
System.out.println("]");
}
/**
* 查找数据:根据值查找索引
* */
public int search(long value) {
int i;
for(i=0;i<elements;i++) {
if(value == arr[i]) {
break;
}
}
//i查到最后一个值了 return -1;
if(i == elements) {
return -1;
}else {
return i;
}
}
/**
* 根据索引来查找
* */
public long indexsearch(int b) {
if(b>elements || b<0) {
throw new ArrayIndexOutOfBoundsException();
}else {
return arr[b];
}
}
/**
* 删除数据(根据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--;
}
}
/**
* 更新数据
* */
public void change(int index,int newvalue) {
if(index>elements || index<0) {
throw new ArrayIndexOutOfBoundsException();
}else {
arr[index] = newvalue;
}
}
}
package day_1;
//封装数组
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.println("]");
}
/**
* 查找数据:根据值查找索引
* */
public int search(long value) {
int i;
for(i=0;i<elements;i++) {
if(value == arr[i]) {
break;
}
}
//i查到最后一个值了 return -1;
if(i == elements) {
return -1;
}else {
return i;
}
}
/**
* 根据索引来查找
* */
public long indexsearch(int b) {
if(b>elements || b<0) {
throw new ArrayIndexOutOfBoundsException();
}else {
return arr[b];
}
}
/**
* 删除数据(根据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--;
}
}
/**
* 更新数据
* */
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;
}
}
}
}
}
测试:
package day_1;
/*
* 数据结构第一节:数组的学习
* 数组的更删改查
* */
public class shuzu {
//数组的学习
public static void main(String[] args) {
long[] arr = new long[10];
//另一种方法:
long[] arr1 = new long[]{1,2,3,4};
arr[0] = 1;
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr1[2]);
System.out.println(arr1[3]);
System.out.println("--------");
MyArray ma = new MyArray();
ma.insert(12);
ma.insert(43);
ma.insert(89);
ma.display();
System.out.println("-----");
int a = ma.search(891);
System.out.println("index:"+a);
System.out.println("-----");
long x = ma.indexsearch(2);
System.out.println("x:"+x);
System.out.println("-----");
// ma.display();
// System.out.println("直した");
// ma.delete(1);
// ma.display();
ma.change(0,23);
ma.display();
System.out.println("-----");
MyOrderArray moa = new MyOrderArray();
moa.insert(12);
moa.insert(78);
moa.insert(34);
moa.display();
int index = moa.binarySearch(34);
System.out.println("index:"+index);
}
}