算法_线性查找与二分法查找
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("没找到指定元素"); } } }