码迷,mamicode.com
首页 > 其他好文 > 详细

有序数列的二分搜索

时间:2019-09-25 12:44:36      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:缩减   随机   pre   orm   middle   form   数值   bin   sea   

 二分查找

 

技术图片

 

 

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)方法的底层代码:

技术图片

 

 

 技术图片

 

有序数列的二分搜索

标签:缩减   随机   pre   orm   middle   form   数值   bin   sea   

原文地址:https://www.cnblogs.com/ljl150/p/11583792.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!