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
}
}
上一篇: javascript序列化是什么
下一篇: javascript的编写工具有哪些