在数组的查找中,最为简单的查找算法为线性查找。
线性查找实际上就是按顺序遍历数组中的每一个元素,直到查找到目标位置。
public class ArrayTest {
public static void main(String[] args) {
String[] array = new String[] {"alex","bob","candy","david","edward","fox"};
String dest = "edward";//要查找的对象
boolean isFlag = false;//标识
for(int i = 0;i < array.length;i++) {//按索引从小到大遍历
if(array[i] == dest) {
isFlag = true;
System.out.println("finded " + dest + " in position: " + i);
}
}
if(isFlag == false) {
System.out.println("can't match");
}
}
}
线性查找简单粗暴,但效率太低。二分法查找在效率上较线性查找有所提高。
二分法查找不再按照顺序对数组进行遍历,而是将一个数组等分为左右两部分,直接取数组中处于中间位置的元素与要查找的元素比较大小。若中间位置的元素较小,则将查找的范围设置为右边。反之,则将查找的范围设置为左边。
既然二分法需要比较大小,那么意味着二分法只适用于元素是按照大小顺序排列的数组
public class ArrayTest {
public static void main(String[] args) {
// String[] array = new String[] {"alex","bob","candy","david","edward","fox"};
// String dest = "edward";
// boolean isFlag = false;
// for(int i = 0;i < array.length;i++) {
// if(array[i] == dest) {
// isFlag = true;
// System.out.println("finded " + dest + " in position: " + i);
// }
// }
// if(isFlag == false) {
// System.out.println("can't match");
// }
int[] array1 = new int[] {-98,-66,-33,0,3,9,23,34,58};
int dest1 = 3;
int head = 0;//查找起始位置
int end = array1.length - 1;//查找结束位置
boolean isFlag1 = false;
while(head <= end) {
int middle = (head + end)/2;
if(dest1 == array1[middle]) {
isFlag1 = true;
System.out.println("finded " + dest1 + " in position: " + middle);
break;
}else if(dest1 < array1[middle]) {
end = middle - 1;//向左缩小查找范围
}else {
head = middle + 1;//向右缩小查找范围
}
}
if(isFlag1 == false) {
System.out.println("can't match");
}
}
}