1、将数组转换成面向对象的数组
2、使用线性查找
3、使用二分法查找
一、数组:
public class MyArray { //用于存储数据的数组 private int[] elements; //实例对象时,创建数组 public MyArray(){ elements=new int[0]; } //获取数组长度的方法 public int size(){ return 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-1){ throw new RuntimeException("下标越界!!"); } //创建新数组 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){ return elements[index]; } //指定位置插入元素 public void insert(int index,int elemten){ if(index<0||index>elements.length-1){ throw new RuntimeException("插入下标越界"); } 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]=elemten; elements=newarr; } //替换指定位置的元素 public void set(int index,int element){ if(index<0||index>elements.length-1){ throw new RuntimeException(); } elements[index]=element; } //线性查找 public int search(int target){ //遍历数组 for(int i=0;i<elements.length;i++){ if(elements[i]==target){ return i; } } return -1; } //二分查找 public int binarySearch(int target){ //记录开始位置 int begin=0; //记录结束位置 int end=elements.length-1; //记录中间的位置 int mid=(begin+end)/2; //循环查找 while(true){ //什么情况下没有这个元素? //开始位置在位数之后或或重合,没有这个元素 if(begin>=end){ return -1; } //判断中间这个元素是不是要查找的元素 if(elements[mid]==target){ return mid; //中间这个元素不是要查的元素 }else{ //判断中间这个元素是不是比目标元素更大 if(elements[mid]>target){ //结束位置调到中间位置 end=mid-1; }else{ //把开始的位置调到中间位置 begin=mid+1; } //取出新的中间位置 mid=(begin+end)/2; } } } }
原文地址:https://www.cnblogs.com/axu521/p/9958299.html
时间: 2024-10-10 21:12:08