JAVA数组的最大最小值二分法查找
二分查找算法java代码

二分查找算法java代码二分查找算法(Binary Search Algorithm)是一种有效的查找算法,它可以在有序数组中快速定位指定值的位置。
二分查找算法的思想是:对于有序数组,先取中间点,将要查找的值与中间点作比较,如果相等则直接返回,如果小于中间点,则在左半边继续查找,如果大于中间点,则在右半边继续查找,直到找到值为止。
二分查找的时间复杂度是 O(log2n),比线性查找的时间复杂度 O(n) 要快得多。
因此,在大规模数据的查找中,二分查找是一种更为合适的算法。
public class BinarySearch {public static int search(int[] arr, int target) {int low = 0, high = arr.length - 1;while (low <= high) { // 当 low 和 high 指针重合时,退出循环int mid = (low + high) / 2; // 取中间位置if (arr[mid] == target) { // 找到目标值return mid;} else if (arr[mid] > target) { // 目标值在左半边high = mid - 1;} else { // 目标值在右半边low = mid + 1;}}return -1; // 没有找到目标值}public static void main(String[] args) {int[] arr = {1, 3, 5, 7, 9, 11, 13};int target = 7;int index = search(arr, target);if (index == -1) {System.out.println("目标值不存在");} else {System.out.println("目标值在数组中的位置是:" + index);}}}首先定义了一个静态方法 search,参数是一个有序数组 arr 和要查找的值 target,返回值是目标值在数组中的位置。
java 二分法查找方法

java 二分法查找方法二分法查找方法,又称折半查找法,是一种用于在有序数组中查找特定元素的有效方法。
它通过将数组分成两部分,判断目标元素与中间元素的大小关系,从而确定目标元素在哪一部分中,然后再在该部分中继续查找,直到找到目标元素或确定目标元素不存在为止。
二分法查找的时间复杂度为O(log n),效率非常高。
在Java中,我们可以通过以下步骤来实现二分法查找方法:1. 确定查找范围:首先,需要确定要查找的数组或列表是有序的,如果不是有序的,则需要先进行排序。
2. 初始化左右边界:设置左边界low为0,右边界high为数组长度减1。
3. 循环查找:在一个while循环中,不断更新中间位置mid为(low + high) / 2,然后判断目标元素与中间元素的大小关系:- 如果目标元素等于中间元素,则找到目标元素,返回中间位置索引。
- 如果目标元素小于中间元素,则更新右边界high为mid - 1。
- 如果目标元素大于中间元素,则更新左边界low为mid + 1。
4. 返回结果:如果循环结束后仍未找到目标元素,则返回-1表示目标元素不存在于数组中。
以下是一个简单的Java代码示例,用于实现二分法查找方法:```javapublic static int binarySearch(int[] arr, int target) {int low = 0;int high = arr.length - 1;while (low <= high) {int mid = low + (high - low) / 2;if (arr[mid] == target) {return mid;} else if (arr[mid] < target) {low = mid + 1;} else {high = mid - 1;}}return -1;}```通过调用上述方法,可以在有序数组中查找目标元素的索引位置,如果目标元素存在,则返回其索引位置,如果不存在,则返回-1。
java找寻数组最小值的方法 -回复

java找寻数组最小值的方法-回复标题:Java找寻数组最小值的方法在计算机编程中,查找和操作数据是最常见的任务之一。
其中一种常见的情况是找到一个数组中的最小值。
本文将详细介绍如何使用Java来实现这一功能。
首先,我们需要理解什么是数组。
数组是在内存中连续存储的相同类型的数据元素的集合。
它可以通过索引访问,并且可以在创建时指定大小。
在Java中,我们有多种类型的数组,包括整型、浮点型、字符型等。
那么,如何在Java中找到数组的最小值呢?这里我们介绍两种方法:循环遍历法和使用Java内置函数。
一、循环遍历法这种方法是通过比较数组中的每一个元素,找出最小值。
具体步骤如下:1. 定义一个变量min,初始化为数组的第一个元素。
2. 使用for循环遍历数组中的所有元素。
3. 在每次循环中,比较当前元素和min的大小。
如果当前元素小于min,则更新min为当前元素。
4. 循环结束后,min就是数组中的最小值。
以下是一个具体的Java代码示例:javapublic class Main {public static void main(String[] args) {int[] arr = {5, 2, 8, 9, 1};int min = arr[0];for (int i = 1; i < arr.length; i++) {if (arr[i] < min) {min = arr[i];}}System.out.println("The minimum value in the array is: " + min);}}在这个例子中,我们首先定义了一个包含5个元素的整数数组arr。
然后我们设置min等于数组的第一个元素,接着我们使用一个for循环来遍历数组的其余元素。
在循环中,我们比较每个元素与min的值。
如果当前元素小于min,我们就把min更新为当前元素。
最后,我们打印出min,这就是数组中的最小值。
java算法-二分法查找实现

java算法-⼆分法查找实现什么是⼆分法查找⾸先,使⽤⼆分法查找的前提是:被查找的数组已排好序具体实现:假如有⼀组数为3,12,24,36,55,68,75,88要查给定的值24.可设三个变量front,mid,end分别指向数据的上界,中间和下界,mid=(front+end)/2.1.开始令front=0(指向3),end=7(指向88),则mid=3(指向36)。
因为a[mid]>x,故应在前半段中查找。
2.令新的end=mid-1=2,⽽front=0不变,则新的mid=1。
此时x>a[mid],故确定应在后半段中查找。
3.令新的front=mid+1=2,⽽end=2不变,则新的mid=2,此时a[mid]=x,查找成功,返回查找元素的索引。
如果要查找的数不是数列中的数,例如x=25,当第三次判断时,x>a[mid],按以上规律,令front=mid+1,即front=3,出现front>end的情况,表⽰查找不成功,放回-1。
⼆分法查找使⽤场景⼆分法查找适⽤于数据量较⼤时,但是数据需要先排好顺序。
对于我们很多⼈来说,还是⽤于⾯试……代码实现package com.xzlf.binarySearch;import java.util.Arrays;public class TestBinarySearch {public static void main(String[] args) {int[ ] arr = { 30,20,50,10,80,9,7,12,100,40,8};int searchWord = 20; // 所要查找的数Arrays.sort(arr); //⼆分法查找之前,⼀定要对数组元素排序System.out.println(Arrays.toString(arr));System.out.println(searchWord+"元素的索引:"+binarySearch(arr,searchWord));System.out.println("========================");int errorWord = 66; // 查找不存在的数System.out.println(errorWord+"元素的索引:"+binarySearch(arr,errorWord));}public static int binarySearch(int[] arr, int value) {int low = 0; // 开始位置int high = arr.length - 1; // 结束位置while(low <= high) {int middle = (low + high) / 2;if (value == arr[middle]) {return middle; //返回查询到的索引位置}if (value > arr[middle]) {low = middle + 1;}if (value < arr[middle]) {high = middle - 1;}}//上⾯循环完毕,说明未找到,返回-1return -1;}}以上代码运⾏结果为:。
二分查找算法(JAVA)

⼆分查找算法(JAVA)1.⼆分查找⼜称折半查找,它是⼀种效率较⾼的查找⽅法。
2.⼆分查找要求:(1)必须采⽤顺序存储结构(2).必须按关键字⼤⼩有序排列3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后;将要查找的值和数组的中值进⾏⽐较,若⼩于中值则在中值前⾯找,若⼤于中值则在中值后⾯找,等于中值时直接返回。
然后依次是⼀个递归过程,将前半部分或者后半部分继续分解为三部分。
4.实现:⼆分查找的实现⽤递归和循环两种⽅式5.代码:1package other;23public class BinarySearch {4/*5 * 循环实现⼆分查找算法arr 已排好序的数组x 需要查找的数-1 ⽆法查到数据6*/7public static int binarySearch(int[] arr, int x) {8int low = 0;9int high = arr.length-1;10while(low <= high) {11int middle = (low + high)/2;12if(x == arr[middle]) {13return middle;14 }else if(x <arr[middle]) {15 high = middle - 1;16 }else {17 low = middle + 1;18 }19 }20return -1;21 }22 //递归实现⼆分查找23public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){24int midIndex = (beginIndex+endIndex)/2;25if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){26return -1;27 }28if(data <dataset[midIndex]){29return binarySearch(dataset,data,beginIndex,midIndex-1);30 }else if(data>dataset[midIndex]){31return binarySearch(dataset,data,midIndex+1,endIndex);32 }else {33return midIndex;34 }35 }3637public static void main(String[] args) {38int[] arr = { 6, 12, 33, 87, 90, 97, 108, 561 };39 System.out.println("循环查找:" + (binarySearch(arr, 87) + 1));40 System.out.println("递归查找"+binarySearch(arr,3,87,arr.length-1));41 }42 }。
java算法之二分查找法的实例详解

java算法之⼆分查找法的实例详解java算法之⼆分查找法的实例详解原理假定查找范围为⼀个有序数组(如升序排列),要从中查找某⼀元素,如果该元素在此数组中,则返回其索引,否则返回-1。
通过数组长度可取出中间位置元素的索引,将其值与⽬标值⽐较,如果中间位置元素值⼤于⽬标值,则在左部分进⾏查找,如果中间位置值⼩于⽬标值,则在右部分进⾏查找,如此循环,直到结束。
⼆分查找算法之所以快是因为它没有遍历数组的每个元素,⽽仅仅是查找部分元素就能找到⽬标或确定其不存在,当然前提是查找范围为有序数组。
Java的简单实现package me.geed.algorithms;public class BinarySearch {/*** 从⼀个有序数组(如升序)中找到值为key元素* @param key* @param array* @return 如果找到⽬标元素,则返回其在数组中的索引,否则返回-1*/public static int find(int key, int[] array){int low = 0;int high = array.length - 1;while (low <= high) {int mid = low + (high - low) / 2;if (array[mid] > key) {high = mid - 1;} else if (array[mid] < key) {low = mid + 1;} else {return mid;}}return -1;}public static void main(String[] args) {// TODO Auto-generated method stubint[] array = {2, 3, 5, 9, 10, 13, 23, 45, 78, 89, 100, 128, 256};System.out.println("⽬标元素索引值:" + BinarySearch.find(9, array));System.out.println("⽬标元素索引值:" + BinarySearch.find(26, array));}}输出结果为:⽬标元素索引值:3⽬标元素索引值:-1⼆分查找算法的时间复杂度假设范围数组长度为N,则⼆分查找的时间复杂度为O(logN)以上就是java算法中⼆分查找的实例详解,如有疑问请留⾔或到本站社区交流讨论,感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!。
java找出给定数组中的最大数和最小数原理

java找出给定数组中的最大数和最小数原理下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!Java找出给定数组中的最大数和最小数原理在Java编程中,找出给定数组中的最大数和最小数是一项常见的任务。
java 二分查找法案例

Java二分查找法案例1. 什么是二分查找法二分查找法(Binary Search)是一种在有序数组中查找某一特定元素的搜索算法。
它将目标值与数组的中间元素进行比较,如果相等则返回该元素的索引,如果目标值小于中间元素,则在数组的左半部分继续查找,如果目标值大于中间元素,则在数组的右半部分继续查找。
通过每次将查找范围缩小一半,最终可以找到目标值。
2. 二分查找法的实现原理二分查找法的实现原理可以分为以下几个步骤:1.确定查找范围的起始和结束位置,一般为数组的第一个元素和最后一个元素。
2.计算查找范围的中间位置,即(start + end) / 2。
3.比较中间位置的元素与目标值的大小关系:–如果中间位置的元素等于目标值,则返回该位置。
–如果中间位置的元素大于目标值,则更新结束位置为中间位置的前一个位置。
–如果中间位置的元素小于目标值,则更新起始位置为中间位置的后一个位置。
4.重复以上步骤,直到找到目标值或者起始位置大于结束位置为止。
3. 二分查找法的代码实现下面是一个使用二分查找法在有序数组中查找目标值的示例代码:public class BinarySearch {public static int binarySearch(int[] nums, int target) {int start = 0;int end = nums.length - 1;while (start <= end) {int mid = (start + end) / 2;if (nums[mid] == target) {return mid;} else if (nums[mid] > target) {end = mid - 1;} else {start = mid + 1;}}return -1;}public static void main(String[] args) {int[] nums = {1, 3, 5, 7, 9};int target = 5;int result = binarySearch(nums, target);if (result == -1) {System.out.println("目标值不存在");} else {System.out.println("目标值的索引为:" + result);}}}4. 二分查找法的时间复杂度和空间复杂度二分查找法的时间复杂度为 O(log n),其中 n 是数组的长度。
Java用分治法查找数组元素的最大值和最小值。

Java⽤分治法查找数组元素的最⼤值和最⼩值。
描述:⽤分治法查找数组元素的最⼤值和最⼩值。
输⼊:随机输⼊10个整数输出: max=最⼤的那个数 min=最⼩的那个数public class MaxAndMin{public static void main(String[] args) {Scanner sc = new Scanner(System.in);String[] strNums = sc.nextLine().split(" ");sc.close();int[] nums = new int[strNums.length];for (int i = 0; i < strNums.length; i++) {nums[i] = Integer.parseInt(strNums[i]);}int[] Max = new int[1];int[] Min = new int[1];maxAndmin(nums, 0, nums.length - 1, Max, Min);System.out.println("max:"+Max[0]);System.out.println("min:"+Min[0]);}public static void maxAndmin(int[] a, int left, int right, int[] maxnum, int[] minnum) {if (left == right) {maxnum[0] = a[left];minnum[0] = a[right];} else if (left + 1 == right) {if (a[left] > a[right]) {maxnum[0] = a[left];minnum[0] = a[left];} else {maxnum[0] = a[right];minnum[0] = a[left];}} else {int m = (right + left) / 2;int lmax[] = { 0 };int lmin[] = { 0 };int rmax[] = { 0 };int rmin[] = { 0 };maxAndmin(a, left, m, lmax, lmin);maxAndmin(a, m + 1, right, rmax, rmin);if (lmax[0] > rmax[0]) {maxnum[0] = lmax[0];} else {maxnum[0] = rmax[0];}if (lmin[0] < rmin[0]) {minnum[0] = lmin[0];} else {minnum[0] = rmin[0];}}}}。
java 二分查找函数

java 二分查找函数【Java 二分查找函数】在计算机科学领域中,二分查找是一种高效的查找算法,特别适用于已排序的数组。
本文将详细介绍Java 中的二分查找函数,并且通过一步一步的解释帮助读者理解该算法的实现原理。
1. 概念和原理二分查找,也被称为折半查找,是一种在有序数组中查找某个特定元素的方法。
基本思想是将数组分成两部分,然后根据目标元素与中间元素的比较结果来确定目标元素在哪一部分中,然后再在该部分中进行查找。
这个过程一直持续到目标元素被找到,或者确定目标元素不在数组中为止。
2. Java 中的二分查找函数在Java 中,二分查找函数通常以静态形式实现,并且在标准库中提供。
2.1 `Arrays` 类中的`binarySearch(int[] a, int key)` 方法该方法用于在已排序的整型数组`a` 中查找整数`key`,并返回`key` 在数组中的索引位置。
如果`key` 不存在于数组中,则返回其在有序插入位置的负值。
2.2 `Collections` 类中的`binarySearch(List<? extends Comparable<? super T>> list, T key)` 方法该方法用于在已排序的泛型列表`list` 中查找元素`key`,并返回`key` 在列表中的索引位置。
如果`key` 不存在于列表中,则返回其在有序插入位置的负值。
3. 二分查找函数的使用示例下面是一个示例代码,展示了如何使用Java 中的二分查找函数来查找一个整数数组中的目标元素。
javaimport java.util.Arrays;public class BinarySearchExample {public static void main(String[] args) {int[] arr = {1, 3, 5, 7, 9, 11, 13};int target = 7;int index = Arrays.binarySearch(arr, target);if (index >= 0) {System.out.println("目标元素" + target + " 在数组中的索引位置为" + index);} else {System.out.println("目标元素" + target + " 不存在于数组中,其在有序插入位置为" + (-index - 1));}}}运行以上代码,将输出:目标元素7 在数组中的索引位置为3以上示例演示了如何使用`Arrays.binarySearch()` 方法在已排序的整数数组中查找目标元素的索引位置。
Java二分法检索算法代码实现详解

Java⼆分法检索算法代码实现详解⼀,⼆分法检索算法介绍⼆分法检索(binary search)⼜称折半检索,⼆分法检索的基本思想是设字典中的元素从⼩到⼤有序地存放在数组(array)中。
是最常⽤的搜索算法之⼀,这主要是由于其搜索时间短。
⼆,⼆分法检索算法思路这种搜索使⽤分⽽治之⽅法,并且需要事先对数据集进⾏排序。
它将输⼊集合分为相等的两半,并且每次迭代都将⽬标元素与中间元素进⾏⽐较。
如果找到该元素,则搜索结束。
否则,我们根据⽬标元素是⼩于还是⼤于中间元素,通过划分并选择适当的数组分区来继续寻找元素。
这就是为什么对Binary Search有⼀个排序的集合很重要的原因。
当firstIndex(我们的指针)经过lastIndex(最后⼀个元素)时,搜索将终⽌,这意味着我们已经搜索了整个数组,并且该元素不存在。
有两种⽅法可以实现此算法- 迭代和递归。
这⾥不应该是关于时间和空间这两个实现之间复杂的差异,虽然这不成⽴于所有语⾔。
三,⼆分法检索算法代码实现迭代式⾸先让我们看⼀下迭代⽅法:public class SearchAlgorithms {/***迭代⽅法* @param arr* @param elementToSearch* @return*/public static int binarySearch(int arr[], int elementToSearch) {int firstIndex = 0;int lastIndex = arr.length - 1;// 终⽌条件(元素不存在)while(firstIndex <= lastIndex) {int middleIndex = (firstIndex + lastIndex) / 2;// 如果中间元素是我们的⽬标元素,那么返回它的索引if (arr[middleIndex] == elementToSearch) {return middleIndex;}// 如果中间的元素⽐较⼩// 将我们的指数指向中间+1,不考虑前半部分else if (arr[middleIndex] < elementToSearch)firstIndex = middleIndex + 1;// 如果中间的元素更⼤// 将我们的指数指向中间1,不考虑下半部分else if (arr[middleIndex] > elementToSearch)lastIndex = middleIndex - 1;}return -1;}/*** ⽤于打印结果* @param targetParameter* @param index*/public static void print(int targetParameter, int index) {if (index == -1){System.out.println(targetParameter + " 未找到");}else {System.out.println(targetParameter + " 搜索结果为: " + index);}}//测试⼀下public static void main(String[] args) {int index = binarySearch(new int[]{89, 57, 91, 47, 95, 3, 27, 22, 67, 99}, 67);print(67, index);}}输出:递归的现在让我们看⼀下递归实现:递归⽅法的区别在于,⼀旦获得新分区,我们便会调⽤⽅法本⾝。
Java基础系列-查找数组的最大值和最小值

Java基础系列-查找数组的最⼤值和最⼩值package com.test6;public class test5 {public static void main(String[] args) {int[] arr = {1, 2, 31, 4, 5, 6, 7, 88, 9, 11, -1};float[] arr2 = {1, 2, 31, 4, 5, 6, 7, 88.88f, 9, 11.1f, -1f};ArrayHelper ah = new ArrayHelper();ah.GetMinAndMax(arr);ah.GetMinAndMax(arr2);/** 打印显⽰数组元素包括:1 2 31 4 5 6 7 88 9 11 -1数组的最⼤值是:88数组的最⼩值是:-1数组元素包括:1.0 2.0 31.0 4.0 5.0 6.0 7.0 88.88 9.0 11.1 -1.0数组的最⼤值是:88.88数组的最⼩值是:-1.0*/}}class ArrayHelper {public void GetMinAndMax(int[] arr) {int min = arr[0];int max = arr[0];System.out.print("数组元素包括:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");if (arr[i] > max) // 判断最⼤值max = arr[i];if (arr[i] < min) // 判断最⼩值min = arr[i];}System.out.println();System.out.println("数组的最⼤值是:" + max); // 输出最⼤值System.out.println("数组的最⼩值是:" + min); // 输出最⼩值}public void GetMinAndMax(float[] arr) {float min = arr[0];float max = arr[0];System.out.print("数组元素包括:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");if (arr[i] > max) // 判断最⼤值max = arr[i];if (arr[i] < min) // 判断最⼩值min = arr[i];}System.out.println();System.out.println("数组的最⼤值是:" + max); // 输出最⼤值System.out.println("数组的最⼩值是:" + min); // 输出最⼩值}}。
java二分法

java二分法java二分法是Java中一种常用的查找算法,它又称为折半查找法。
它可以在有序数组中,快速找到特定元素的位置,从而达到查找某元素在数组中的位置的目的。
java二分法的基本思想是:将数组分成前后两部分,取中间元素与查找元素比较,如果相等则查找结束;如果小于查找元素,则在后半部分查找;如果大于查找元素,则在前半部分查找,循环这个过程,最终找到目标元素的位置。
时间复杂度分析:java二分法的时间复杂度为O(logn),其中n为要查找的数据的个数,比起线性表的查找方式要优秀得多。
java二分法的实现需要考虑到以下几点:1、仔细确定问题:首先需要明确有序数组的排序方式,即从大到小排列还是从小到大排列,根据具体的情况进行排序,然后确定目标数字是否存在。
2、中间元素定义:将数组大小作为一个变量,定义一个位置变量mid,以便确定中间的位置,此处mid=(low+high)/2。
3、查找范围:需要定义两个变量,前一个为low 位置,后一个为high,即初始情况下low=0,high=arr.length-1,表示要查找数组中第low位到第high位之间的元素。
4、循环递归:比较中间位置和要查找的元素,如果相等,则表示查找到了,结束查找;如果中间位置的值大于查找的元素,则在前半部分查找,将high的值重新设置为中间元素的位置,循环递归上述过程;如果中间位置的值小于要查找的元素,则在后半部分查找,将low的值重新设置为中间元素的位置,循环递归上述过程。
总结:java二分法是一种查找算法,它需要在有序数组中查找特定元素。
它能够有效地减少查找时间复杂度,将复杂度从线性表O(n)降低到log级别O(logn)。
java二分法的实现需要考虑清楚从大到小排列还是从小到大排列,定义位置变量,设置查找范围,并使用循环递归的方式进行查找。
java 二分查找算法

java 二分查找算法想索取更多相关资料请加qq:649085085或登录PS;本文档由北大青鸟广安门收集自互联网,仅作分享之用。
编程之美在于算法之美,先来看看二分查找的算法:隐藏条件:二分查找必须是有序的,从小到大,或从大到小的排序才能进行二分查找,下面来看看代码:package .daming;public class MainActivity {/*** @param args*/public static void main(String[] args) {int[] aInts = new int[]{1,3,5,8,11,14,16,24,37,47,49,56,63,83,223};//排序是从小到大int[] aInts2 = newint[]{322,243,211,156,98,85,79,68,53,47,38,24,13,6,2};//排序是从大到小// TODO Auto-generated method stubMainActivity main = new MainActivity();System.out.println("aInts the reault is : " + main.binarySearch (aInts, 0, aInts.length, 24));System.out.println("aInts2 the reault is : " + main.binarySearch2(aInts2, 0, aInts2.length, 243));}//从小到大的二分查找private int binarySearch(int[] a, int start, int len, int key) { int high = start + len, low = start - 1, guess;while (high - low > 1) {guess = (high + low) / 2;if (a[guess] < key)low = guess;elsehigh = guess;}if (high == start + len)return ~(start + len);else if (a[high] == key)return high;elsereturn ~high;}//从大到小的二分查找private int binarySearch2(int[] a, int start, int len, int key) { int high = start + len, low = start - 1, guess;while (high - low > 1) {guess = (high + low) / 2;if (a[guess] > key)low = guess;elsehigh = guess;}if (high == start + len)return ~(start + len);else if (a[high] == key)return high;elsereturn ~high;}}想索取更多相关资料请加qq:649085085或登录 PS;本文档由北大青鸟广安门收集自互联网,仅作分享之用。
java二分查找的简单例题

Java二分查找的简单例题1. 简介二分查找(Binary Search),也称为折半查找,是一种在有序数组中查找某一特定元素的搜素算法。
它的基本思想是将查找区间逐渐缩小,直到找到目标元素或者确定目标元素不存在。
2. 二分查找算法二分查找算法的实现原理如下: 1. 找到数组的中间元素。
2. 如果中间元素等于目标元素,返回中间元素的下标。
3. 如果中间元素大于目标元素,将查找区间缩小为左半部分,并重复步骤1。
4. 如果中间元素小于目标元素,将查找区间缩小为右半部分,并重复步骤1。
5. 如果查找区间缩小为空,则表示目标元素不存在。
通过每次将查找区间缩小一半的方式,二分查找的时间复杂度为O(logn)。
3. 二分查找的实现以下是一个用Java实现的二分查找算法的例子:public class BinarySearch {public int binarySearch(int[] nums, int target) {int low = 0;int high = nums.length - 1;while (low <= high) {int mid = (low + high) / 2;if (nums[mid] == target) {return mid;} else if (nums[mid] < target) {low = mid + 1;} else {high = mid - 1;}}return -1;}}这个例子中的binarySearch方法接收一个有序数组nums和目标元素target作为参数,返回目标元素在数组中的下标。
如果目标元素不存在,则返回-1。
4. 二分查找的应用场景二分查找算法适用于以下场景: - 当数据是有序的,且数据量较大时,二分查找可以快速定位目标元素。
- 当数据的插入、删除操作相对较少,而查找操作较频繁时,可以选择使用二分查找来提高效率。
java数组获取最大数值的方法

java数组获取最大数值的方法Java数组是一种常见的数据结构,可以存储一组有序的数据。
在处理数组数据时,经常需要找到最大的数据。
本文将介绍几种Java 数组获取最大数值的方法,希望对Java程序员有所帮助。
1. 遍历数组法遍历数组是最简单的方法,可以通过一个循环遍历整个数组,找到最大数值。
代码如下:int[] arr = {1, 5, 8, 2, 9};int max = arr[0];for(int i=1; i<arr.length; i++){if(arr[i] > max){max = arr[i];}}System.out.println('数组中的最大数值为:' + max);2. 使用Arrays类的sort方法Java中的Arrays类提供了一个sort方法,可以对数组进行排序。
排序后,最大的数值就在数组的最后一个位置。
代码如下:int[] arr = {1, 5, 8, 2, 9};Arrays.sort(arr);int max = arr[arr.length-1];System.out.println('数组中的最大数值为:' + max);3. 使用Collections类的max方法如果数组中的数据类型是包装类(如Integer),可以使用Java 中的Collections类的max方法来获取最大值。
代码如下:Integer[] arr = {1, 5, 8, 2, 9};List<Integer> list = Arrays.asList(arr);Integer max = Collections.max(list);System.out.println('数组中的最大数值为:' + max);总结:以上三种方法都可以获取Java数组中的最大数值,具体使用哪种方法可以根据实际情况选择。
遍历数组法最简单,但对于长度较大的数组效率较低;使用sort方法可以轻松获取最大值,但会改变原数组的顺序;而使用max方法只适用于包装类的数组。
Java实现二分查找树及其相关操作

Java实现⼆分查找树及其相关操作⼆分查找树(Binary Search Tree)的基本操作有搜索、求最⼤值、求最⼩值、求前驱、求后继、插⼊及删除。
对⼆分查找树的进⾏基本操作所花费的时间与树的⾼度成⽐例。
例如有n个节点的完全⼆叉树,对它进⾏的基本操作的时间复杂度为O(logn)。
然⽽,如果树是⼀个有n个节点的线性的链,则在这种情况下的时间复杂度为O(n)。
1、什么是⼆分查找树⼆分查找树是⼀种有组织的⼆叉树。
我们可以通过链接节点表⽰这样⼀棵树。
每个节点包含键(key),数据(data),左⼦节点(left),右⼦节点(right),⽗节点(parent)这五种属性。
如果⼀个节点没有⽗节点或某个⼦结点,则其对应的属性的值为null。
创建⼀个Node.java⽂件,⽤如下代码表⽰节点:public class Node {public int key;public int data;public Node left;public Node right;public Node parent;public Node(){}public Node(int key) {this.key = key;}}创建⼀个BinarySearchTree.java⽂件,⽤如下代码表⽰⼆分查找树:public class BinarySearchTree {public Node root;}接下来,会逐步补充代码。
对于存储在⼆分查找树中的键,必须满⾜下⾯这个条件(⼆分查找树特点):对于⼆叉树中的任⼀节点n,如果left是n左⼦树中的任何⼀个节点,有left.key <= n.key;如果right是n右⼦树中的任⼀节点,则有n.key<=right.key。
如果我们中序遍历⼆分查找树,能升序打印出所有的键(key)。
可在BinarySearchTree.java⽂件中加上如下代码实现中序遍历:private void innerWalk(Node node) {if(node != null) {innerWalk(node.left);System.out.print(node.key + " ");innerWalk(node.right);}}public void innerWalk() {this.innerWalk(this.root);System.out.println();}2、查询⼆分查找树2.1、搜索在⼆分查找树中搜索键为key的结点,如果找到,则返回该结点,否则,返回null。
Java中的二分查找

Java中的⼆分查找在Java.util中有两个类,Arrays和Collectons,可以⽅便快捷的帮我们处理⼀些数组和集合的问题。
它们⾥边都⼀个⼀个⼆分法查找的⽅法:Arrays.binarySearchpublic static int binarySearch(long[] a, long key) {return binarySearch0(a, 0, a.length, key);}private static int binarySearch0(long[] a, int fromIndex, int toIndex,long key) {int low = fromIndex;int high = toIndex - 1;while (low <= high) {int mid = (low + high) >>> 1;long midVal = a[mid];if (midVal < key)low = mid + 1;else if (midVal > key)high = mid - 1;elsereturn mid; // key found}return -(low + 1); // key not found.}Collections.binarySearch:public static <T>int binarySearch(List<? extends Comparable<? super T>> list, T key) {if (list instanceof RandomAccess || list.size()<BINARYSEARCH_THRESHOLD)return Collections.indexedBinarySearch(list, key);elsereturn Collections.iteratorBinarySearch(list, key);}private static <T>int indexedBinarySearch(List<? extends Comparable<? super T>> list, T key) {int low = 0;int high = list.size()-1;while (low <= high) {int mid = (low + high) >>> 1;Comparable<? super T> midVal = list.get(mid);int cmp = pareTo(key);if (cmp < 0)low = mid + 1;else if (cmp > 0)high = mid - 1;elsereturn mid; // key found}return -(low + 1); // key not found}其核⼼算法是⼀致的,区别就在于Arrays⽀持数组,Collectons针对的是实现List接⼝的集合。
两种java实现二分查找的方式

两种java实现⼆分查找的⽅式⽬录1、⼆分查找算法思想2、⼆分查找图⽰说明3、⼆分查找优缺点3、java代码实现3.1 使⽤递归实现3.1 不使⽤递归实现(while循环)3.3 测试4、时间复杂度5、空间复杂度起初在数据结构中学习递归时实现⼆分查找,实际上不⽤递归也可以实现,毕竟递归是需要开辟额外的空间的来辅助查询。
本⽂就介绍两种⽅法1、⼆分查找算法思想有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进⾏⽐较,每次缩⼩⼀半的查找范围,直到匹配成功。
⼀个情景:将表中间位置记录的关键字与查找关键字⽐较,如果两者相等,则查找成功;否则利⽤中间位置记录将表分成前、后两个⼦表,如果中间位置记录的关键字⼤于查找关键字,则进⼀步查找前⼀⼦表,否则进⼀步查找后⼀⼦表。
重复以上过程,直到找到满⾜条件的记录,使查找成功,或直到⼦表不存在为⽌,此时查找不成功。
2、⼆分查找图⽰说明图⽚来源百度图⽚:3、⼆分查找优缺点优点:⽐较次数少,查找速度快,平均性能好;缺点:是要求待查表为有序表,且插⼊删除困难。
因此,折半查找⽅法适⽤于不经常变动⽽查找频繁的有序列表。
使⽤条件:查找序列是顺序结构,有序。
3、java代码实现3.1 使⽤递归实现/*** 使⽤递归的⼆分查找*title:recursionBinarySearch*@param arr 有序数组*@param key 待查找关键字*@return 找到的位置*/public static int recursionBinarySearch(int[] arr,int key,int low,int high){if(key < arr[low] || key > arr[high] || low > high){return -1;}int middle = (low + high) / 2; //初始中间位置if(arr[middle] > key){//⽐关键字⼤则关键字在左区域return recursionBinarySearch(arr, key, low, middle - 1);}else if(arr[middle] < key){//⽐关键字⼩则关键字在右区域return recursionBinarySearch(arr, key, middle + 1, high);}else {return middle;}}3.1 不使⽤递归实现(while循环)/*** 不使⽤递归的⼆分查找*title:commonBinarySearch*@param arr*@param key*@return 关键字位置*/public static int commonBinarySearch(int[] arr,int key){int low = 0;int high = arr.length - 1;int middle = 0; //定义middleif(key < arr[low] || key > arr[high] || low > high){return -1;}while(low <= high){middle = (low + high) / 2;if(arr[middle] > key){//⽐关键字⼤则关键字在左区域high = middle - 1;}else if(arr[middle] < key){//⽐关键字⼩则关键字在右区域low = middle + 1;}else{return middle;}}return -1; //最后仍然没有找到,则返回-1}3.3 测试测试代码:public static void main(String[] args) {int[] arr = {1,3,5,7,9,11};int key = 4;//int position = recursionBinarySearch(arr,key,0,arr.length - 1);int position = commonBinarySearch(arr, key);if(position == -1){System.out.println("查找的是"+key+",序列中没有该数!");}else{System.out.println("查找的是"+key+",找到位置为:"+position);}}recursionBinarySearch()的测试:key分别为0,9,10,15的查找结果查找的是0,序列中没有该数!查找的是9,找到位置为:4查找的是10,序列中没有该数!查找的是15,序列中没有该数!commonBinarySearch()的测试:key分别为-1,5,6,20的查找结果查找的是-1,序列中没有该数!查找的是5,找到位置为:2查找的是6,序列中没有该数!查找的是20,序列中没有该数!4、时间复杂度采⽤的是分治策略最坏的情况下两种⽅式时间复杂度⼀样:O(log2 N)最好情况下为O(1)5、空间复杂度算法的空间复杂度并不是计算实际占⽤的空间,⽽是计算整个算法的辅助空间单元的个数⾮递归⽅式:由于辅助空间是常数级别的所以:空间复杂度是O(1);递归⽅式:递归的次数和深度都是log2 N,每次所需要的辅助空间都是常数级别的:空间复杂度:O(log2N )到此这篇关于两种java实现⼆分查找的⽅式的⽂章就介绍到这了,更多相关java实现⼆分查找内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for (int i = 1; i < array.length; i++) {
if (array[i] > array[maxIndex]) {
maxIndex = i;
}
}
return array[maxIndex];
}
/**
* 最大值查找2
*
* @param array
* @return
*/
public static int getMax_2(int[] array) {
int maxElement = array[0]; // 通过数组中的元素进行比较
for (int i = 0; i < array.length; i++) {
int max1 = getMax_1(arr);
System.out.println("通过角标比较最大值:" + max1);
int max2 = getMax_2(arr);
System.out.println("通过数组中的元素进行比较:" + max2);
Arrays.sort(arr);
int min = 0; // 最小角标
int max = arr.length - 1;// 最大角标
int mid = (min + max) / 2; // 中间角标
while (min <= max) {
mid = (max + min) >> 1; // >>代表右移一位相当于除以2速度快
}
mid = (min + max) / 2; // 每循环一次都要二分
}
return mid;
}
/**
* 二分查找法(折半查找法)前提是必须是排好序的数组 第二种方法
*
* @param array
* @return
*/
public static int halfSeach_2(int[] arr, int key) {
int index = halfSeach_2(arr, 98);
System.out.println("要查找的值的下标是:" + index);
}
/**
* 最大值查找1
*
* @param array
* @return
*/
public static int getMax_1(int[] array) {
if (key > arr[mid]) {
min = mid + 1;
} else if (key < arr[mid]) {
max = mid - 1;
} else {
return mid;
}
}
return -1;
}
}
if (array[i] > maxElement) {
maxElement = array[i];
}
}
return maxElement;
}
/**
* 二分查找法(折半查找法)前提是必须是排好序的数组 第 (key != arr[mid]) {
if (key > arr[mid]) {
min = mid + 1;
} else if (key < arr[mid]) {
max = mid - 1;
}
if (max < min) {
return -1;
import java.util.Arrays;
public class ArrayMaxMinSelect {
public static void main(String[] args) {
int[] arr = { -59, -25, -69, 0, 180, 98, 125 };
* @return
*/
public static int halfSeach_1(int[] arr, int key) {
int min = 0; // 最小角标
int max = arr.length - 1;// 最大角标
int mid = (min + max) / 2; // 中间角标