package com.demo;
/*
* 1.线性查找
* 在一列给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程。
* 线性查找又称为顺序查找。
* 2.二分法查找
* 二分法查找适用于数据量较大时,但是数据需要先排好顺序。
*/
public class ArrayTest {
public static void main(String[] args) {
// 1.线性查找
// 字符串数组
String[] arrStr = new String[] { "AA", "BB", "CC", "DD", "EE" };
// 遍历数组
for (int i = 0; i < arrStr.length; i++) {
System.out.print(arrStr[i] + " ");
}
System.out.println();
String objStr = "BB"; // 目标字符串
boolean flag = true; // 标识
// 找到了指定元素
for (int i = 0; i < arrStr.length; i++) {
if (objStr.equals(arrStr[i])) {
System.out.println("找到了指定元素,位置为:" + i);
flag = false;
break;
}
}
// 没找到指定元素
if (flag) {
System.out.println("没找到指定元素");
}
System.out.println();
// 2.二分法查找 (前提:所查找的数是有序的)
// 整型数组
int[] arrNum = new int[] { 12, 24, 36, 48, 56, 76, 88, 94 };
// 遍历数组
for (int i = 0; i < arrNum.length; i++) {
System.out.print(arrNum[i] + " ");
}
System.out.println();
int objNum = 48; // 所要查找的数字
int head = 0; // 头索引
int end = arrNum.length - 1; // 尾索引
boolean flag1 = true; // 标识
while (head <= end) {
int mid = (head + end) / 2; // 中间位置索引
if (objNum == arrNum[mid]) { // 找到了
System.out.println("找到了指定元素,位置为:" + mid);
flag1 = false; // 如果找到了元素,则改变flag1
break;
} else if (objNum < arrNum[mid]) {
end = mid - 1;
} else { // objNum > arrNum[mid]
head = mid + 1;
}
}
// 没找到(flag1没有改变)
if (flag1) {
System.out.println("没找到指定元素");
}
}
}