元素的查找
-
// 线性 // int index = -1; int a = input.nextInt(); for (int i=0;i<arr.length;i++){ if (a==arr[i]){ System.out.println("你输入的数字所对应的下标为:" + i); break; } /*if (index != -1){ System.out.println("你输入的数字所对应的下标为:" + index); }else{ System.out.println("-1"); }*/ if(i ==arr.length-1){ System.out.println("-1"); } }
-
线性查找:从数组起始位置开始,挨个元素进行等值判断,如果找到,则返回其所在的下标,否则返回-1,表示没有找到
import java.util.Scanner; public class Demo04 { public static void main(String[]args) { //键盘输入一个数查看是否在arr数组中,如果包含,则打印下标,不存在,打印-1 int [] arr = {1,2,3,4,5}; Scanner input = new Scanner(System.in); int a = input.nextInt(); for (int i = 0;i < arr.length;i++) { if (a==arr[i]) { System.out.println(i); break; } if (i==arr.length-1) { System.out.println(-1); } } } }
-
二分查找:首先数组元素必须是有序排列的
-
// 二分查找 int first = 0; int middle; int last =arr.length-1; while(first<=last){ middle =(first+last) /2; if(cat==arr[middle]){ System.out.println("你输入的数字所对应的下标为:" + middle); break; }else if(cat>arr[middle]){ first = middle+1; }else{ last = middle-1; } }
import java.util.Scanner; public class Demo04 { public static void main(String[]args) { //键盘输入一个数查看是否在arr数组中,如果包含,则打印下标,不存在,打印-1 int [] arr = {1,2,3,5,8,10,20,30}; Scanner input = new Scanner(System.in); int a = input.nextInt(); int q = 0;//起始位置 int j = arr.length-1;//结束位置 int z;//中间位置 boolean flag = false;//标记位 while (q<=j) {//起始位置始终小于结束位置 z = (q+j)/2;//根据起始位置和结束位置得到中间位置 if (a==arr[z]) {//如果相等,则找到了,返回下标,修改标记位 System.out.println("下标为:"+z); flag = true; break; } if (a<arr[z]) {//如果要找的数小于中间值,则意味着结束位置变为上次中间位置-1 j=z-1; } if (a>arr[z]) { q=z+1; } } if (!flag) { System.out.println("没有找到"); } } }
-
-
求最值
public class Demo04 { public static void main(String[]args) { int [] arr = {10,2,5,15,3,12,20,1}; int max = arr[0]; int min = arr[0]; for (int i = 1;i<arr.length;i++) { if (arr[i]>max) { max = arr[i]; } if (arr[i]<min) { min = arr[i]; } } System.out.println(max); System.out.println(min); } }