1.线性查找
代码如下:
package com.oraleoaec.ch06;
import java.util.Scanner;
public class LinearSearch {
@SuppressWarnings("resource")
public static void main(String[] args) {
int[] array = { 12, 23, 67, 56, 9, 10 };
System.out.println("请输入一个数:");
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int sum = 0;//累加
int maxIndex = 0;//最大数默认为0;
int findIndex = -1;//指定数在数组中的位置,-1表示找不到
for(int i = 0; i < array.length; i++){
//1.在数组中找出指定的数字
if(array[i] == a){
findIndex = i;
}
//2.计算累加和
sum += array[i];
//3.求出数组中最大的数
if(maxIndex < array[i]){
maxIndex = array[i];
}
}
if(findIndex != -1){
System.out.println("查找的数在第 " + (findIndex + 1) + " 个位置,这个数组的最大值为:" + maxIndex);
}else{
System.out.println("你要查找的数不存在!这个数组的最大值为:" + maxIndex);
}
System.out.println("这个数组的和为:" + sum);
}
}
运行结果如下:
2.二分查找
package com.oraleoaec.ch06;
import java.util.Scanner;
/**
* 二分查找法:查找对象一定是有序的(从大到小或者从小到大)
* @author 46512
*
*/
public class BinarySearch {
@SuppressWarnings("resource")
public static void main(String[] args) {
System.out.println("请输入一个数:");
Scanner sc = new Scanner(System.in);
int findNumber = sc.nextInt();
int[] array = {5,6,9,12,20,27,34};
int findIndex = -1;//指定数在数组中的位置
int start = 0;//起点索引
int end = array.length - 1;//终点的索引
int middle;//中心点的索引(此处可以暂时不计算,在循环中计算赋值)
//循环结束条件为start > end
while(start <= end){
//计算中心点
middle = (start + end) / 2;
if(findNumber > array[middle]){
start = middle + 1;
}else if(findNumber < array[middle]){
end = middle - 1;
}else{
//找到了,记录下当前的位置
findIndex = middle;
break;
}
}
if(findIndex == -1){
//没有找到
System.out.println(findNumber + " 不在数组中!");
}else{
//找到
System.out.println(findNumber + " 在数组中的第 " + (findIndex + 1) + " 个位置");
}
}
}
运行结果如下: