有序数列的二分搜索
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)方法的底层代码:
以上是关于有序数列的二分搜索的主要内容,如果未能解决你的问题,请参考以下文章