Java算法01-查找
2021-05-30 15:00
标签:class 结果 http ring plain 判断 sea 算法 void 从左到右挨个查找 查找效率慢 结果: 先找到数组中间的元素,判断与目标元素的关系: 若就是要查找的元素则输出查找成功 若大于要查找的数则继续对左半边的元素执行步骤1 若小于则继续对右半边的元素执行步骤1 重复以上步骤,直到找到目标元素 数组必须要有序且是顺序储存的,一般要用到排序算法(详见:https://www.cnblogs.com/TSCCG/p/14748591.html) 效率快,尤其当数据量大时 结果: Java算法01-查找 标签:class 结果 http ring plain 判断 sea 算法 void 原文地址:https://www.cnblogs.com/TSCCG/p/14751416.html一、线性查找
1.基本思想:
2.特点:
3.代码:
import java.util.Scanner;
/**
* @author: TSCCG
* @date: 2021/5/10
*/
public class Search {
/**
* 1.线性查找
* 查询速度慢
*/
public static void linearSearch(String[] arr, String dest1) {
boolean isFlag1 = true; // 处理查询不到时的情况
for(int i = 0;i ) {
if(dest1.equals(arr[i])) {
System.out.println("查询成功!该元素在数组中的位置是:" + (i + 1));
isFlag1 = false; // 如果找到目标元素,就将isFlag1赋值为false
}
}
if(isFlag1) { // 如果未找到目标元素,那么isFlag1的值将仍为true,执行下列语句
System.out.println("查询失败!");
}
}
/**
* 程序入口
*/
public static void main(String[] args) {
// Scanner sc = new Scanner(System.in);
// String dest1 = sc.next();
String[] arr1 = {"AA","BB","CC","DD"};
String dest1 = "CC";
linearSearch(arr1,dest1);
String dest2 = "WC";
linearSearch(arr1,dest2);
}
}
查询成功!该元素在数组中的位置是:3
查询失败!
二、二分查找
1.基本思想:
2.特点:
3.代码:
/**
* @author: TSCCG
* @date: 2021/5/10
*/
public class Search {
/**
* 2.二分查找
* 查询速度快
* 数组必须是有序的
*/
public static void binarySearch(int[] arr,int dest2) {
int head = 0;
int end = arr.length - 1;
boolean isFlag2 = true;
while(head end) {
int middle = (head + end) / 2;
if(dest2 == arr[middle]) {
System.out.println("查找成功,该元素在数组中的位置是:" + (middle + 1));
isFlag2 = false;
break;
} else if(dest2 > arr[middle]) {
// 走到这步时说明本次的arr[middle]不是目标元素,
// 那么就可以将此元素排除出下次的查询范围,故head = middle + 1
head = middle + 1;
} else { //dest2
end = middle - 1;
}
}
if(isFlag2) {
System.out.println("查询失败!");
}
}
/**
* 程序入口
*/
public static void main(String[] args) {
int[] arr2 = {-3,0,12,34,55,102};
int dest3 = -3;
binarySearch(arr2,dest3);
int dest4 = 996;
binarySearch(arr2,dest4);
}
}
查找成功,该元素在数组中的位置是:1
查询失败!