欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java数据结构与算法1(面向对象数组使用-增、删、改、线性查找、二分查找)

程序员文章站 2022-03-22 19:16:14
...

Java数据结构与算法1(面向对象数组使用-增、删、改、线性查找、二分查找)

import java.util.Arrays;

public class MyArray {
	//用于存储数据的数组
	private int[] elements;
	public MyArray(){
		elements = new int[0];
	}
	//获取数组长度
	public int size(){
		return this.elements.length;
	}
	//往数组的末尾添加一个元素
	public void add(int element){
		//创建一个新的数组
		int[] newArr = new int[elements.length+1];
		//把原数组中的元素复制到新数组中
		for(int i = 0;i<elements.length;i++){
			newArr[i]=elements[i];
		}
		newArr[elements.length]=element;
		elements = newArr;
	}
	//打印所有元素到控制台
	public void show(){
		System.out.println(Arrays.toString(elements));
	}
	//删除数组中的元素
	public void delete(int index){
		if(index<0||index>elements.length){
			throw new RuntimeException("下标越界");
		}
		//创建一个新数组,长度为原数组的长度-1
		int[] newArr = new int[elements.length-1];
		//复制原有数据到新数组
		for(int i=0;i<newArr.length;i++){
			//要删除的元素前面的元素
			if(i<index){
				newArr[i]=elements[i];
				//想要删除的元素后面的元素
				}else{
					newArr[i]= elements[i+1];
				}
		}
		elements = newArr;
	}
	//去除指定位置的元素
	public int get(int index){
		if(index<0){
			throw new RuntimeException("下标越界");
		}
		return elements[index];
	}
	//插入一个元素到指定位置
	public void insert(int index,int element){
		if(index<elements.length&&index>=0){
			//创建一个新的数组
			int[] newArr = new int[elements.length+1];
			//将原来色数组放入新的数组中
			for(int i = 0;i<elements.length;i++){
				if(i<index){
					newArr[i]=elements[i];
				}else{
					newArr[i+1]=elements[i];
				}
				//插入新的元素
			}
			newArr[index]=element;
			elements = newArr;
		}else{
			throw new RuntimeException("下标越界");
		}
	}
	//替換指定位置的元素
	public void set(int index,int element){
		if(index<0||index>elements.length){
			throw new RuntimeException("下标越界");
		}
		elements[index] = element;
	}
	//线性查找
	public int search(int target){
				//目标元素所在的下标
				int index = -1;
				//遍历数组
				for(int i=0;i<elements.length;i++){
					if(elements[i]==target){
						index = i;
						break;
					}
			}		
				return index;
	}
	//二分查找
	public int binarySearch(int target){
		//记录开始位置
		int begin = 0;
		//记录结束位置
		int end = elements.length-1;
		//记录中间位置
		int middle = (begin+end)/2;
		while(true){
//			System.out.println(middle);
			//开始在结束位置之后或重合,没有这个元素
			if(begin>end){
				return -1;
			}
			//判断中间这个元素是不是要查找的元素
			if(elements[middle]==target){
				return middle;
				//中间这个元素不是要查找的元素
			}else{
				//判断中间这个元素是不是比目标元素大:在前面
				if(elements[middle]>target){
					//把结束位置调整到中间位置的前一个位置
					end = middle-1;
					middle = (begin+end)/2;
					//中间这个元素是不是比目标元素小:在后面面
				}else{
				//	把开始位置调整到中间位置的后一个位置
					begin = middle+1;
				}
				//取出新的位置
				middle = (begin+end)/2;
			}
		
		}
		
	}
	public static void main(String[] args) {
		MyArray myArray = new MyArray();
		int size = myArray.size();
		System.out.println(size);//0
		myArray.add(99);
		myArray.add(98);
		myArray.add(97);
		myArray.show();//[99, 98, 97]
		//删除指定下标的值
		myArray.delete(1);
		myArray.show();//[99, 97]
		
		//获取下标1的值
		System.out.println(myArray.get(1));//97
		
		//向指定下标位置插入值
		myArray.insert(0,8);
		myArray.show();//[8, 99, 97]
		
		//修改指定下标的值
		myArray.set(0, 96);
		myArray.show();//[96, 99, 97]
		
		//线性查找指定值的下标
		System.out.println(myArray.search(99));//1
		MyArray myArray2= new MyArray();
		myArray2.add(1);
		myArray2.add(2);
		myArray2.add(3);
		myArray2.add(4);
		myArray2.add(5);
		myArray2.add(6);
		myArray2.show();//[1, 2, 3, 4, 5, 6]
		//二分查找
		System.out.println(myArray2.binarySearch(5));//4
	}
}

Java数据结构与算法1(面向对象数组使用-增、删、改、线性查找、二分查找)