package ch01;
/**
* @author lixin
* @date 2018年7月22日
* @Description 数组
*/
public class MyArray {
private long[] arr;
//表示有效数据长度
private int element;
public MyArray(){
arr= new long[50];
}
public MyArray(int maxsize){
arr = new long[maxsize];
}
/**
* 添加数据
*/
public void insert(long value){
arr[element] = value;
element++;
}
/**
* 显示所有数据
*/
public void show(){
System.out.print("[");
for(int i =0;i<element;i++){
System.out.print(arr[i]+" ");
}
System.out.print("]");
}
/**
* 查找数据
*/
int select(long value){
int i;
for(i=0;i<element;i++){
if(arr[i]==value){
break;
}
}
if(i==element){
return -1;
}else{
return i;
}
}
/**
* 根据索引来查
*/
long selectByIndex(int index){
if(index>=element||index<0){
throw new ArrayIndexOutOfBoundsException();
}else{
return arr[index];
}
}
/**
* 删除数据
*/
public void delete(int index) {
if(index >= element || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
for(int i = index; i < element; i++) {
arr[i] = arr[i + 1];
}
element--;
}
}
/**
* 更新数据
*/
void change(int index,long value){
if(index >= element || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
arr[index]=value;
}
}
}
有序数组
package ch01;
public class MyOrderArray {
private long[] arr;
//表示有效数据长度
private int element;
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<element;i++){
if(value<arr[i]){
break;
}
}
for(int j=element;j>=i;j--){
arr[j+1]=arr[j];
}
arr[i]=value;
element++;
}
/**
* 显示所有数据
*/
public void show(){
System.out.print("[");
for(int i =0;i<element;i++){
System.out.print(arr[i]+" ");
}
System.out.print("]");
}
/**
* 查找数据
*/
int select(long value){
int i;
for(i=0;i<element;i++){
if(arr[i]==value){
break;
}
}
if(i==element){
return -1;
}else{
return i;
}
}
/**
* 根据索引来查
*/
long selectByIndex(int index){
if(index>=element||index<0){
throw new ArrayIndexOutOfBoundsException();
}else{
return arr[index];
}
}
/**
* 删除数据
*/
public void delete(int index) {
if(index >= element || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
for(int i = index; i < element; i++) {
arr[i] = arr[i + 1];
}
element--;
}
}
/**
* 更新数据
*/
void change(int index,long value){
if(index >= element || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
arr[index]=value;
}
}
/**
* 二分法查找
*/
int binarySearch(long value){
int middle=0;
int left=0;
int right=element;
while(true){
middle=(left+right)/2;
if(arr[middle]==value){
return middle;
}else if(right<=left){
return -1;
}else{
if(value>arr[middle]){
left=middle+1;
}
if(value<arr[middle]){
right=middle-1;
}
}
}
}
}
测试
package ch01;
public class TestArray {
public static void main(String[] args) {
// MyArray arr = new MyArray(40);
// arr.insert(12);
// arr.insert(15);
// arr.insert(159);
// arr.show();
// System.out.println(arr.select(159));
// System.out.println(arr.selectByIndex(2));
// arr.delete(1);
// arr.show();
// arr.change(0, 222);
// arr.show();
MyOrderArray arr = new MyOrderArray(59);
arr.insert(11);
arr.insert(39);
arr.insert(2);
arr.show();
System.out.println(arr.binarySearch(39));
}
}