本文主要是介绍有序数组的查找,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
给定一个有序的数组,查找某个数是否在数组中,请编程实现。
分析与解法
一看到数组本身已经有序,我想你可能反应出了要用二分查找,毕竟二分查找的适用条件就是有序的。那什么是二分查找呢?
二分查找可以解决(预排序数组的查找)问题:只要数组中包含T(即要查找的值),那么通过不断缩小包含T的范围,最终就可以找到它。其算法流程如下:
- 一开始,范围覆盖整个数组。
- 将数组的中间项与T进行比较,如果T比数组的中间项要小,则到数组的前半部分继续查找,反之,则到数组的后半部分继续查找。
- 如此,每次查找可以排除一半元素,范围缩小一半。就这样反复比较,反复缩小范围,最终就会在数组中找到T,或者确定原以为T所在的范围实际为空。
对于包含N个元素的表,整个查找过程大约要经过log(2)N次比较。
代码实现如下:
package com.cb.java.algorithms.programmingmethod.search;/*** 二分查找* * @author 36184**/
public class BinarySearch {public static void binarySearch(int[] num, int value) {if (num == null || num.length <= 0) {return;}int begin = 0;int end = num.length - 1;while (begin <=end) {int middle = (begin + end) / 2;if (num[middle] > value) {end = middle - 1;} else if (num[middle] < value) {begin = middle + 1;} else {System.out.println("查找的数的下标为:" + middle);break;}}}public static void main(String[] args) {int[] num = { 1, 3, 5, 7, 9, 11, 12, 14, 23, 45 };binarySearch(num, 9);}
}
这篇关于有序数组的查找的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!