当前位置:   article > 正文

java二分查找(含二分查找代码)_java二分查找算法代码

java二分查找算法代码

目录

一:二分查找的条件

二:二分查找思想​​​​​​​

三:二分查找代码(循环)

四:二分查找代码(递归)


一:二分查找的条件

1.1 必须是顺序存储结构

1.2 必须有序序列

二:二分查找思想

当min > max || max < min的时候没有找到

不断的更改mid , 当mid所指向的值等于查找的值的时候查找成功

首先看一个数组,需要对这个数组进行操作。需要对33进行查找的操作,那么target 的值就是33


首先,对 left 的值和 right 的值进行初始化,然后计算 middle 的值
left = 0, right = size - 1
middle = (left + (right - left) / 2 )

 

比较 nums[middle] 的值和 target 的值大小关系

if (nums[middle] > target),代表middle向右所有的数字大于target
if (nums[middle] < target),代表middle向左所有的数字小于target
既不大于也不小于就是找到了相等的值
nums[middle] = 13 < target = 33,left = middle + 1

见下图:


循环条件为 while (left <= right)

此时,left = 6 <= right = 11,则继续进行循环

当前,middle = left + ((right - left) / 2),计算出 middle 的值
计算出 middle 的值后,比较 nums[middle] 和 target 的值,发现:

nums[middle] = 33 == target = 33,找到目标

三:二分查找代码(循环)

  1. package look;
  2. public class BinarySearch {
  3. public static void main(String[] args) {
  4. int[] arr = new int[]{1,2,6,7,9};
  5. int i = search(arr, 1, 0, arr.length - 1);//(0 , 4)
  6. System.out.print(i);
  7. }
  8. public static int search(int[] arr, int target, int min, int max) {
  9. if(min > max || max < min) {
  10. return -1;
  11. }
  12. while(min <= max) {
  13. int mid = (min + max) / 2;
  14. if(arr[mid] == target) {
  15. return mid;
  16. }
  17. if(arr[mid] < target) {
  18. min = mid + 1;
  19. }else if(arr[mid] > target) {
  20. max = mid - 1;
  21. }else {
  22. return -1;
  23. }
  24. }
  25. return -1;
  26. }
  27. }

四:二分查找代码(递归)

  1. package sort;
  2. import java.util.Arrays;
  3. public class InsertSort {
  4. public static void main(String[] args) {
  5. int[] arr = new int[] {1, 2, 3, 4, 5, 6};
  6. int i = select(arr, 0, arr.length - 1, 4);
  7. System.out.println(i);
  8. }
  9. public static int select(int[] array, int left, int right, int searchVal) {
  10. if(left > right || array[0] > searchVal || array[right] < searchVal) {
  11. return -1;
  12. }
  13. //插值查找
  14. // int mid = left + (right - left)*(searchVal - array[left])/(array[right] - array[left]);
  15. //二分查找
  16. int mid = (left + right)/2;
  17. int midValue = array[mid];
  18. if(midValue < searchVal) {
  19. return select(array, mid + 1, right, searchVal);
  20. }else if(midValue > searchVal) {
  21. return select(array, left, mid - 1, searchVal);
  22. }else {
  23. return mid;
  24. }
  25. }
  26. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/977666
推荐阅读
相关标签
  

闽ICP备14008679号