/**
* 普通查找就是一个接一个地找(逐个找),对于数组是否已经排序没有要求
*/
public class 普通查找 {
public static void main(String[] args) {
// 静态初始化一个int数组
int[] array = {6,9,2,5,3,8,7};
// 采用逐个查找方法,查找元素8
for (int i = 0; i < array.length-1; i++) {
if (array[i] == 8){
System.out.println("查找的元素的下标是:" + i);
return;
}
}
System.out.println("在该数组中没有此元素!");
}
}
/**
* 关于二分法查找是建立在排序基础之上的,二分法查找在java.util.Arrays下面已经写好
* 方法名为"binarySearch",我们这里只是分析其原理。
*/
public class 二分法查找 {
public static void main(String[] args) {
// 静态初始化一个int数组
int[] array = {2,9,21,55,93,98,117};
// 查找
int index = erFenFaChaZhao(array,117);
System.out.println(index == -1? "没有找到该元素!":"该元素的下标是:" + index);
}
/**
* 查找数组中的元素
* @param array 被查找的数组
* @param ele 被查找的元素
* @return -1表示没有找到该元素,大于等于0表示被查找元素的下标
*/
public static int erFenFaChaZhao(int[] array, int ele) {
//最初开始元素下标
int begin = 0;
//最初结束元素下标
int end = array.length-1;
//在循环体中begin一直在增加,end一直在减少,只要begin <= end就一直循环
while (begin <= end){
//通过开始元素下标和结束元素下标获取中间元素下标
int mid = (begin + end) / 2;
//如果中间下标对应的元素正好等于被查找的元素,就返回该下标,并结束方法
if (array[mid] == ele){
return mid;
//如果中间下标对应的元素小于被查找的元素,说明被查找的元素在中间元素的右侧
}else if (array[mid] < ele){
//重新定位新的开始元素下标
begin = mid + 1;
//程序运行到此说明中间元素下标对应的元素大于被查找的元素,说明被查找的元素在中间元素的左侧
}else {
//重新定位结束元素的下标
end = mid - 1;
}
}
return -1;
}
}