二分查找

xiaoxiao2025-11-13  5

1.首先找到中间位置

int data[] = {1, 3, 5, 6, 7, 8, 9};//定义数组 int low=0;//最小下标 int high=data.length-1;//最大下标 int mid=(low+high)/2;//中间位置

2.判断要查找的值和中间下标的大小,并做比较,小的话high=mid-1 ;大的话low=mid+1

if(x==data[mid]) return mid; else if(x<data[mid]){// high=mid-1;//下标最大值改变 } else if(x>data[mid]){ low=mid+1;//下标最小值值改变 }

3.完整代码

/** * 二分查找 */ public class AlgorithmTest { public static void main(String[] args) { int data[] = {1, 3, 5, 6, 7, 8, 9}; //二分查找 int index=binarySearch(data,9); System.out.println("二分查找下标:》》》"+index); //二分递归查找 int indexRecursion=binarySearch(data,9,0,data.length-1); System.out.println("二分查找下标(递归):》》》"+indexRecursion); } //二分查找 public static int binarySearch(int [] data,int x){ int low=0;//最小下标 int high=data.length-1;//最大下标 while(low<=high){ int mid=(low+high)/2;//二分后下标位置 if(x==data[mid]) return mid; else if(x<data[mid]){// high=mid-1;//下标最大值改变 } else if(x>data[mid]){ low=mid+1;//下标最小值值改变 } } return -1; } //递归二分查找 public static int binarySearch(int[] data,int x,int low,int high){ if(x<data[low]||x>data[high]||low>high) return -1; int mid=(low+high)/2; if(x<data[mid]){ return binarySearch(data,x,low,mid-1); }else if(x>data[mid]){ return binarySearch(data,x,mid+1,high); }else{ return mid; } } }

4.测试结果 

 

 

转载请注明原文地址: https://www.6miu.com/read-5039595.html

最新回复(0)