JAVA小练习之二分法搜索数组(二)

Tallulah ·
更新时间:2024-11-14
· 760 次阅读

写在开头:今天的小练习是在JAVA系列(一)中的小练习,为了方便寻找我将它单独列出来。

二分法搜索数组

任务目标:通过二分法来搜索数组查看目标值是否存在于数组之中。
任务自述:当我们拿到任意一个一维数组,首先需要对其进行排序,然后再使用二分法,但是这里使用二分是将位置也就是index进行二分运算,因为是离散数组,如果对数值进行二分容易找不到数值。但对于数组的两端,目前我还没想到比较好的方法判断。
任务实现:

**小练习** 设计一个二分的算法来寻找目标整数是否存在已有数组中, ```java /* 本程序用于寻找目标数值是否出现在数组中,二分法 */ package tt; import java.util.Scanner; public class Homework1 { public static void main(String aa[]){ int s, len, scores[] = {1,24,25,26,45,67}; len = scores.length; for(int i = 0; i < len; i++){ for(int j = i+1; j scores[j]){ s = scores[j]; scores[j] = scores[i]; scores[i] = s; } } System.out.println(scores[i]); //展示排序后的数组 } //设计一个排序的算法,让数字首先从小到大依次排列 int a = 1, b = len, m = (int)len/2; Scanner in = new Scanner(System.in); System.out.print("[请输入你需要寻找的整数]> "); int goal = in.nextInt(); //输入寻找目标值 while(true){ m = (b + a)/2; if (goal == scores[0] ||goal == scores[len - 1]){ System.out.println(goal+" 在数组中!"); break; } //用来判断数据是否在开头和结尾存在; if (b - a == 1){ System.out.println(goal+" 在数组中不能找到!"); break; //用来结束搜索 }else{ if (goal > scores[m-1]){ a = m; }else if(goal < scores[m-1]){ b = m; //调整两端 }else{ System.out.println(goal+" 在数组中!"); break; }//正常的二分搜索区间缩小已经寻找过程 } } } } [请输入你需要寻找的整数]> 24 1 在数组中! [请输入你需要寻找的整数]> 70 70 在数组中不能找到!

结语
后面如果有机会想来更简化一下这个程序,现在看着还是有一点繁琐。
谢谢阅读。


作者:明曦君



二分 二分法 JAVA 数组

需要 登录 后方可回复, 如果你还没有账号请 注册新账号