Java-数据结构与算法-二分查找法

1.二分查找法思路:不断缩小范围,直到low <= high

2.代码:

 1 package Test;
 2
 3 import java.util.Arrays;
 4
 5 public class BinarySearch {
 6
 7     public static void main(String[] args) {
 8         int [] a = {1,5,7,9,11,12,16,20};
 9         int target = 16;
10         //System.out.println(Arrays.binarySearch(a, target));
11         System.out.println(binarySearch(a, target));
12     }
13
14     public static int binarySearch(int [] a, int target){
15         int low = 0;
16         int high = a.length - 1;
17
18         while (low <= high) {
19             int mid = (low + high) >>> 1;
20             int midVal = a[mid];
21
22             if (midVal < target)
23                 low = mid + 1;
24             else if (midVal > target)
25                 high = mid - 1;
26             else
27                 return mid; // key found
28         }
29         return -(low + 1);  // key not found.
30     }
31 }

3.结果:6

时间: 2024-12-21 09:29:10

Java-数据结构与算法-二分查找法的相关文章

java 数据结构与算法 之查找法

一.二分查找法 二分查找就是将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找:如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素. @Test public void searchDuty(){ Integer[]t=new Integer[]{1,2,3,4,5,6};//原数组 Integer key=10;//目标元素 Integer start=0;//开始位置 Integer end=t.length-1;//结束位置 while(start<

数据结构和算法————二分查找

  二分查找 这些天深刻的体会到了巩固知识的重要性.对数据结构和算法的学习有一年的时间,然后搁置了一年,最后发现都忘记了. 不过还好不是失忆,看了之前做过的笔记,还是能回想起来的. 现在想在写一遍,算是对本子上的笔记做一个备份,更重要的是加深我的印象. 首先说一下二分查找的思想:假设数据是按升序排序的,对于给定值val,从序列的中间位置开始比较. 如果当前位置值等于val,则查找成功: 若val小于当前位置值,则在数列的前半段中查找 若val大于当前位置值,则在数列的后半段中继续查找. 重复以上

数据结构50:二分查找法(折半查找法)

折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高.但是该算法的使用的前提是静态查找表中的数据必须是有序的. 例如,在{5,21,13,19,37,75,56,64,88 ,80,92}这个查找表使用折半查找算法查找数据之前,需要首先对该表中的数据按照所查的关键字进行排序:{5,13,19,21,37,56,64,75,80,88,92}. 在折半查找之前对查找表按照所查的关键字进行排序的意思是:若查找表中存储的数据元素含有多个关键字时,使用哪种关键字做折半查找,就需

[数据结构与算法] : 二分查找

1 #include <stdio.h> 2 3 #define NotFound -1; 4 typedef int ElementType; 5 6 int BinarySearch( const ElementType A[], ElementType X, int N ) 7 { 8 int Low, Mid, High; 9 10 Low = 0; High = N-1; 11 while( Low <= High ) // 注意终止条件 12 { 13 Mid = (Low

java数据结构和算法------折半查找

1 package iYou.neugle.search; 2 3 public class Binary_search { 4 public static int BinarySearch(double[] array, double key) { 5 int left = 0; 6 int right = array.length - 1; 7 while (left <= right) { 8 int mid = (left + right) / 2; 9 if (array[mid] =

java数据结构和算法------顺序查找

1 package iYou.neugle.search; 2 3 public class Sequence_search { 4 public static int SequenceSearch(double[] array, double key) { 5 for (int i = 0; i < array.length; i++) { 6 if (key == array[i]) { 7 return i; 8 } 9 } 10 return -1; 11 } 12 }

js 二分查找法之每日一更

<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html"/> <meta name="keywords" content="二分查找算法" /> <meta name="description" content="二分查找算法&

Java学习 (七)、数组,查找算法,二分查找法,冒泡排序,选择排序,插入排序

一.常用数组查找算法 工作原理:它又称为顺序查找,在一列给定的值中进行搜索,从一端的开始逐一检查每个元素,知道找到所需元素的过程. 例1:查找指定的数在数组中出现的位置,找到返回下标,找不到返回-1 1 import java.util.Scanner; 2 public class LinearSearch{ 3 public static void main(String []argas) 4 { 5 int [] array={10,100,90,65,80,92}; 6 System.o

Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]