通用
public static int[] getArray() {
int[] array = new int[100];
for (int i = 0; i < array.length; i++) {
array[i] = i + 1;
}
return array;
}
1、順序查找
public class Find {
public static int count = 0;
public static void main(String[] args) {
int[] array = getArray();
System.out.println("index:" + find(array, 30));
}
public static int find(int[] array, int value) {
for (int index = 0; index < array.length; index++) {
count++;
if (array[index] == value) {
System.out.println("循環了x次,找到了!".replace("x", String.valueOf(count)));
return index;
}
}
System.out.println("沒有找到!");
return -1;
}
}
循環了30次,找到了!
index:29
2、二分法查找
public class Find2 {
public static int count = 0;
public static void main(String[] args) {
int[] array = getArray();
System.out.println("index:" + find(array, 30));
}
public static int find(int[] array, int value) {
int start = 0;
int end = array.length - 1;
int mid;
while (start <= end) {
count++;
mid = (start + end) / 2;
if (array[mid] == value) {
System.out.println("循環了x次,找到了!".replace("x", String.valueOf(count)));
return mid;
} else if (array[mid] < value) {
start = mid + 1;
} else if (array[mid] > value) {
end = mid - 1;
}
}
System.out.println("沒有找到!");
return -1;
}
}
循環了7次,找到了!
index:29
3、插值查找
public class Find3 {
public static int count = 0;
public static void main(String[] args) {
int[] array = getArray();
System.out.println("index:" + find(array, 30, 0, array.length - 1));
}
public static int find(int[] array, int value, int start, int end) {
count++;
if (start > end || value < array[0] || value > array[array.length - 1]) {
return -1;
}
int mid = start + (end - start) * (value - array[start]) / (array[end] - array[start]);
if (array[mid] == value) {
System.out.println("循環了x次,找到了!".replace("x", String.valueOf(count)));
return mid;
} else if (array[mid] < value) {
return find(array, value, mid + 1, end);
} else if (array[mid] > value) {
return find(array, value, start, mid - 1);
}
System.out.println("沒有找到!");
return -1;
}
}
循環了1次,找到了!
index:29