有序数组的查找

题目描述

给定一个有序的数组,查找某个数是否在数组中,请编程实现。

分析与解法

一看到数组本身已经有序,我想你可能反应出了要用二分查找,毕竟二分查找的适用条件就是有序的。那什么是二分查找呢?

二分查找可以解决(预排序数组的查找)问题:只要数组中包含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);
	}
}

猜你喜欢

转载自blog.csdn.net/u013230189/article/details/80886231
今日推荐