Disclaimer: This article is a blogger original article, shall not be reproduced without the bloggers allowed. https://blog.csdn.net/qq_40833790/article/details/90598147
An object-oriented array
import java.util.Arrays;
public class MyArray {
private int[] elements;
public MyArray() {
elements = new int[0];
}
/**
* 获取数组的长度
*
* @return
*/
public int size() {
return elements.length;
}
/**
* 添加一个元素
* @param element
*/
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;
}
/**
* 删除指定元素
* @param index
*/
public void delete(int index) {
if (index < 0 || index > elements.length - 1) {
throw new RuntimeException("索引值越界");
}
int[] newArr = new int[elements.length - 1];
//4.数组赋值
for (int i = 0; i < newArr.length; i++) {
if (index > i) {
newArr[i] = elements[i];
} else {
newArr[i] = elements[i + 1];
}
}
//5.新数组赋值给旧数组
elements = newArr;
}
/**
* 获取某个元素
* @param index
* @return
*/
public int get(int index){
if(index < 0 ||index > elements.length -1){
throw new RuntimeException("索引值越界");
}
return elements[index];
}
/**
* 往指定位置插入数据
* @param index
* @param element
*/
public void insert(int index,int element){
if(index < 0 || index > elements.length){
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] = element;
elements = newArr;
}
/**
* 替换指定位置的元素
* @param index
* @param element
*/
public void set(int index,int element){
if(index < 0 || index > elements.length){
throw new RuntimeException("索引值越界");
}
elements[index] = element;
}
/**
* 线性查找
* @param target
*/
public int search(int target){
for (int i = 0; i < elements.length; i++) {
if(elements[i] == target){
return i;
}
}
return -1;
}
/**
* 二分法查找
* @param target
* @return
*/
public int binarySearch(int target){
int begin = 0;
int end = elements.length-1;
int mid = (begin+end)/2;
int index = -1;
while (true){
if(begin >= end){
break;
}
if(elements[mid] == target){//等于中间元素
index = mid;
break;
}else{
if(elements[mid] < target){//大于中间元素
begin = mid + 1;
}else{
end = mid -1;
}
mid = (begin+end)/2;
}
}
return index;
}
/**
* 查看数组中的元素
*/
public void show() {
System.out.println(Arrays.toString(elements));
}
}
Second, the search algorithm (for example an array)
1, linear search
Traversing i.e. linear search to find the initial array index, when found to find the target data abort
public static void main(String[] args) {
int[] arr = new int[]{0,1,2,3,4,5,6};//目标数组
int index = -1;
int target = 4;//目标数据
for (int i = 0; i < arr.length; i++) {
if(arr[i] == target){
index = i;
break;
}
}
System.out.println("index="+index);
}
2, a binary search
The premise of a binary search is an array must be ordered
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5,6,7,8};//目标数组
int target = 6;//目标数据
int begin = 0;//开始位置
int end = arr.length-1;//结束位置
int mid = (begin+end)/2;
int index = -1;
while (true){//查找数据不在有序范围内
if(begin >= end){
break;
}
if(arr[mid] == target){//中间位置是否等于查找数据
index = mid;
break;
}else{
if(arr[mid] > target){//中间数据比查找数据大
end = mid-1;
}else if(arr[mid] < target){//中间数据比查找数据小
begin = mid+1;
}
mid = (begin+end)/2;
}
}
System.out.println("index="+index);
}