데이터 구조/전통 이분법 질서 배열 (자바)
이분법 조 회 는 많은 책 에서 그것 의 그림 자 를 볼 수 있다.
간단 한 논리 입 니 다. 조회 가 빠 르 고 삭제 디자인 을 삽입 하여 자 리 를 옮 기 는 작업 이 느 립 니 다.
public class HightArray {
int number;//数组当前值的个数
long[] array;
public HightArray(int num){
array = new long[num];
number = 0;
}
/**
* 添加一个值
* @param i
* @return
*/
public boolean insert(long value){
int i;
//有序数组,值在插入时需要确认其位置
for (i = 0; i < number; i++) {//确认放在第几位子上
if (array[i] > value)//从小到大放值
break;
}
for (int j = number; j > i; j--) {
array[j] = array[j-1];
}
array[i] = value;
number++;
return true;
}
/**
* 删除一个值
* @return
*/
public boolean delete(long value){
int i = find(value);
if (i < 0)//确保有这个值
return false;
// else if (i == array.length - 1) { 使用自己的number操作
// array[i] = null;
// return true;
// } array.length - 1
for (int j = i; j < number - 1; j++) {//值替换
array[j] = array[j+1];
}
number--;
return true;
}
/**
* 根据值查找
* @return
*/
public int find(long value){
//排除没有值时候查找
if (number == 0) {
System.out.println("没放值找毛..");
return -1;
}
int min = 0;//最小值
int max = number - 1;//当前值
int num;//当前寻找记录(下标)
while (true) {
if (min > max) {
return -1;
}
num = (min + max) / 2;//二分
if (array[num] == value) {
return num;//find value
} else if (array[num] > value) {//next find
max = num - 1;//out while (true)
} else {//小于value
min = num + 1;
}
}
}
/**
* 显示输出数组所有的值
*/
public void syso(){
if (array == null) {
System.out.println("array = null");
} else {
for (int i = 0; i < number; i++) {
System.out.println(array[i] + " ");
}
}
}
}
테스트 는 기본적으로 통과 되 었 습 니 다. delete 에 서 는 number --> (number - 1) 로 만 배열 이상 을 제거 하 였 습 니 다.
test.java
public static void main(String[] args){
HightArray array = new HightArray(5);
array.insert(12);
array.insert(13);
array.insert(11);
array.insert(12);
array.insert(1);
array.delete(1);
array.syso();
控制台输出:
11
12
12
13
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.