有序数列的二分搜索

Posted ljl150

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有序数列的二分搜索相关的知识,希望对你有一定的参考价值。

 二分查找

 

技术图片

 

 

import java.util.*;
public class HW3
public static void main(String[] args)
Scanner in = new Scanner(System.in); //输入要查找的数
System.out.println("请输入要打印的数据:");
int number = in.nextInt();
Random rd = new Random(); //在数组中随机,注:范围是在打印时标示
int[] arr = new int[11];
for (int i = 0; i < 11; i++) //对数组的11个数,开始分配值

arr[i] = rd.nextInt(50); //0-49 //对这11个数组赋值

Arrays.sort(arr); // 因为二分搜索是对有序数列使用的,所以先对数组中的数排序
System.out.println(Arrays.toString(arr)); //将有序数组打印出来
int index = Search(arr, number); //调用search()方法(二分搜索)进行查找
if(index==-1) //若返回的是-1,则没有找到数
System.out.println("没有查找到该数!!!");
else //若返回为下标,则表示找到了该数
System.out.println("查找的数下标为:"+index);





private static int Search(int[] arr, int number) //将所要遍历的数组和所要查找的数值赋给该方法
int start = 0; //先定义三个变量,用来缩减范围
int end = arr.length - 1;
int middle = 0;

while (end >= start) //end>=start,说明数组还没有查完,则继续查找
middle = (start + end) / 2;
if (number < arr[middle])
end = middle - 1;
else if (number > arr[middle])
start = middle + 1;
else
return middle; //当找到该数,则返回下标



return -1; //若end>start,表明数组已遍历完也没有找到所要找到数,此时返回-1;

运行结果: 

技术图片

 

 

以上是二分查找的代码实现,其实在Java中已经有可以直接调用的二分查找函数,使用方法具体如下:

 1 import java.util.*;
 2 public class HW3 
 3     public static void main(String[] args) 
 4         Scanner in = new Scanner(System.in);      //输入要查找的数
 5         System.out.println("请输入要打印的数据:");
 6         int number = in.nextInt();
 7         Random rd = new Random();       //在数组中随机,注:范围是在打印时标示
 8         int[] arr = new int[11];
 9         for (int i = 0; i < 11; i++)   //对数组的11个数,开始分配值
10         
11           arr[i] = rd.nextInt(50);   //0-49   //对这11个数组赋值
12         
13         Arrays.sort(arr);  // 因为二分搜索是对有序数列使用的,所以先对数组中的数排序
14         System.out.println(Arrays.toString(arr));    //打印排好序的数组
15         int index = Arrays.binarySearch(arr, number);  //调用search()方法(二分搜索)进行查找
16         if(index<-1)      //若返回的是-1,则没有找到数
17             System.out.println("没有查找到该数!!!");
18         else              //若返回为下标,则表示找到了该数
19             System.out.println("查找的数下标为:"+index);
20         
21     
22 
23 

Arrays.binarySearch(arr,number)方法的底层代码:

    (注意与上述代码不同的是,调用此方法查找数值,若没有找到则返回的是负数,--(insertion point)--1)

技术图片

 

 

 技术图片

 

 Arrays.binarySearch(arr , formindex, endindex, number)方法的底层代码:

技术图片

 

 

 技术图片

 

以上是关于有序数列的二分搜索的主要内容,如果未能解决你的问题,请参考以下文章

不光是查找值!"二分搜索"

二分搜索 - Binary Search

数据结构与算法二分法丨有序数组中二分法的使用

python 二分法查找

[JavaScript 刷题] 二分搜索 - 有序数组的 Single Element,Leetcode 540

『嗨威说』算法设计与分析 - 算法第二章上机实践报告(二分查找 / 改写二分搜索算法 / 两个有序序列的中位数)