`
chenzenghua
  • 浏览: 53769 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

折半查找(二分查找)的递归和非递归算法

    博客分类:
  • JAVA
 
阅读更多
package com.my.test;

/**
 * 折半查找(二分查找)的递归和非递归算法. 说明: 
 * 1、要求所查找的数组已有序,并且其中元素已实现Comparable<T>接口,如Integer、String等.
 * 2、非递归查找使用search();,递归查找使用searchRecursively();
 **/
public class BinarySearch<T extends Comparable<T>> {
	private T[] data;// 要排序的数据

	public BinarySearch(T[] data) {
		this.data = data;
	}

	public int search(T key) {
		int low;
		int high;
		int mid;
		if (data == null) {
			return -1;
		}
		low = 0;
		high = data.length - 1;
		while (low <= high) {
			mid = (low + high) / 2;
			//System.out.println("mid " + mid + " mid value:" + data[mid]);
			if (key.compareTo(data[mid]) < 0) {
				high = mid - 1;
			} else if (key.compareTo(data[mid]) > 0) {
				low = mid + 1;
			} else if (key.compareTo(data[mid]) == 0) {
				return mid;
			}
		}
		return -1;
	}

	private int doSearchRecursively(int low, int high, T key) {
		int mid;
		int result;
		if (low <= high) {
			mid = (low + high) / 2;
			result = key.compareTo(data[mid]);
			//System.out.println("mid " + mid + " mid value:" + data[mid]);
			if (result < 0) {
				return doSearchRecursively(low, mid - 1, key);
			} else if (result > 0) {
				return doSearchRecursively(mid + 1, high, key);
			} else if (result == 0) {
				return mid;
			}
		}
		return -1;
	}

	public int searchRecursively(T key) {
		if (data == null) {
			return -1;
		}
		return doSearchRecursively(0, data.length - 1, key);
	}

	public static void main(String[] args) {
		Integer[] data = { 1, 4, 5, 8, 15, 33, 48, 77, 96 };
		BinarySearch<Integer> binSearch = new BinarySearch<Integer>(data);
		System.out.println("Key index:" + binSearch.search(33));
		System.out.println("Key index:" + binSearch.searchRecursively(3));

		String[] dataStr = { "A", "C", "F", "J", "L", "N", "T" };
		BinarySearch<String> binSearch1 = new BinarySearch<String>(dataStr);
		System.out.println("Key index:" + binSearch1.search("T"));
	}
}
分享到:
评论

相关推荐

    折半查找的递归与非递归算法

    **折半查找(二分查找)算法** 折半查找,又称二分查找,是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分成两个部分,每次比较中间元素与目标值,根据比较结果缩小搜索范围。如果中间元素等于...

    折半查找的递归算法

    折半查找(也称为二分查找)是一种高效的查找算法,适用于有序数组。通过不断将查找区间对半分割,可以快速定位目标值的位置,时间复杂度为O(log n),其中n是数组长度。本文将详细介绍如何使用递归方法实现折半查找...

    折半(二分)查找的c++代码(递归和非递归)实现

    在C++中,这两个实现可能分别对应于`二分查找递归代码.cpp`和`二分查找非递归代码.cpp`中的内容。在实际应用中,根据具体场景和性能需求,可以选择合适的实现方式。需要注意的是,二分查找的前提是输入数组必须是...

    分别用递归和非递归方法实现二分查找算法 的完整程序

    分别用递归和非递归方法实现二分查找算法 的完整程序,indexof()返回的是循环实现的二分法查找,getindex()实现的是递归算法实现的二分法查找。

    递归和非递归二分查找(C语言)

    用C语言开发的递归和非递归二分查找算法,具体内容详见代码

    zhebanchazhao.rar_折半 查找_折半查找_折半查找算法_查找_查找算法

    折半查找,也被称为二分查找,是一种在有序数组中搜索特定元素的高效算法。它的基本思想是将数组分成两半,然后比较中间元素与目标值,根据比较结果决定是在左半部分还是右半部分继续查找。这个过程一直持续到找到...

    chazhao.rar_折半查找 递归算法

    折半查找,也称为二分查找,是一种在有序数组中搜索特定元素的高效算法。它主要利用了分治策略,将查找范围不断减半,直到找到目标元素或者确定元素不存在。这种算法通常在数据量较大且数据已排序的情况下使用,其...

    二分搜索的递归和非递归实现

    二分搜索,也被称为折半查找,是一种在有序数组中查找特定元素的高效算法。它主要利用了分治策略,将问题规模不断减半,从而快速定位目标值。本篇文章将详细探讨二分搜索的递归和非递归实现。 首先,我们来看递归...

    请写出对有序表进行折半查找的非递归算法.doc

    ### 对有序表进行折半查找的非递归算法 #### 非递归算法解析 在计算机科学领域,折半查找(又称二分查找)是一种高效的查找算法,它的工作原理是在一个有序数组中查找特定元素的位置。对于有序表进行折半查找的非...

    折半查找算法实现与分析

    折半查找(又称二分查找)是一种高效的查找算法,适用于在已排序数组中查找目标元素。其基本原理是通过将查找范围不断缩小一半,逐步逼近目标元素,显著提高查找效率。每次查找时,算法将当前查找范围的中间元素与...

    运用非递归方式设计折半查找法的程序.rar_折半查找

    折半查找,也称为二分查找,是一种在有序数组中寻找特定元素的搜索算法。它的基本思想是每次将待搜索区域减半,直到找到目标元素或者确定目标元素不存在。这种算法在大数据量的情况下非常高效,因为其时间复杂度为O...

    C++折半查找代码实现

    折半查找(Binary Search),又称二分查找,是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间...

    有关于折半查找的问题

    折半查找,也称为二分查找,是一种在有序数组中搜索特定元素的高效算法。它基于分治策略,每次将搜索区间减半,直到找到目标元素或者搜索区间为空。在这个问题中,描述提到元素是整型量,并且按从小到大的顺序排列,...

    Python3实现非递归二分查找

    二分查找,也称为折半查找,是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分成两半,每次都比较中间元素与目标值,根据比较结果决定是在左半部分还是右半部分继续查找,直到找到目标元素或者搜索...

    折半查找及其改进算法及数据结构课程设计报告.doc

    折半查找,又称二分查找,其基本思路是通过不断将查找区间减半来定位目标元素。初始时,区间为整个有序数组。比较中间元素与目标值,若相等则查找成功,若目标值小于中间元素,则在左半区间重复此过程,反之则在右半...

    《二分查找算法》完整版教学设计

    教师采用的教学方法主要是课堂讲授,使用PPT讲解《二分查找算法》的教学设计,引入《二分查找算法》的适用条件和算法思想,并动态展示《二分查找算法》的思想和递归实现。 教学过程 1. 新课导入:教师展示课件,...

    查找算法(顺序查找、折半查找、分块查找、平衡二叉树)-(一)

    折半查找(也称为二分查找)是一种高效的查找算法,它适用于有序的顺序表。 **基本思想**:每次将待查找区间分为两半,将给定值key与表中中间位置的元素进行比较,如果相等则查找成功;如果不等,则根据比较结果...

    二分查找算法和索引查找算法的实现

    二分查找算法和索引查找算法是两种在计算机科学中广泛应用的高效搜索策略,尤其在处理大规模有序数据时。在本篇文章中,我们将深入探讨这两种算法的原理、实现及应用场景。 首先,我们来讨论二分查找算法。二分查找...

    折半查找法PPT学习教案.pptx

    折半查找法,又称二分查找法,是一种在有序数组中高效寻找目标元素的搜索算法。这种方法的关键在于每次查找都将待查找的区间减半,从而快速定位目标元素。以下是关于折半查找法的详细说明: 1. **基本原理**: ...

    PHP实现的折半查找算法示例

    折半查找,也称为二分查找,是一种在有序数组中查找特定元素的搜索算法。它的核心思想是通过不断缩小搜索范围,每次将待搜索区域减半,直到找到目标元素或者确定元素不存在。这种方法适用于数据量较大且已经排序的...

Global site tag (gtag.js) - Google Analytics