`
韩悠悠
  • 浏览: 839819 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

查找算法:线性查找,折半查找

 
阅读更多

 

线性查找

package com.search;

/**
 * JAVA实现线性查找
 * 
 * @author lenovo
 * 
 */
public class LSearch {

	public static int[] Data = { 12, 76, 29, 22, 15, 62, 29, 58, 35, 67, 58,
			33, 28, 89, 90, 28, 64, 48, 20, 77 }; // 输入数据数组

	public static int count = 1; // 查找次数计数变量

	public static void main(String[] args) {
		int KeyValue = 22;
		// 调用线性查找
		if (Linear_Search((int) KeyValue)) {
			// 输出查找次数
			System.out.println("");
			System.out.println("Search Time = " + (int) count);
		} else {
			// 输出没有找到数据
			System.out.println("");
			System.out.println("No Found!!");
		}

	}

	// 顺序查找
	public static boolean Linear_Search(int Key) {
		int i; // 数据索引计数变量

		for (i = 0; i < 20; i++) {
			// 输出数据
			System.out.print("[" + (int) Data[i] + "]");
			// 查找到数据时
			if ((int) Key == (int) Data[i])
				return true; // 传回true
			count++; // 计数器递增
		}
		return false; // 传回false
	}
}

 

 

折半查找

package com.search;

/**
 * 折半查找
 * 优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,
 * 且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
 * 
 * 算法描述
 * 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
 * 否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,
 * 否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
 * 
 * @author lenovo
 * 
 */
public class BSearch {

	public static int Max = 20;
	public static int[] Data = { 12, 16, 19, 22, 25, 32, 39, 48, 55, 57, 58,
			63, 68, 69, 70, 78, 84, 88, 90, 97 }; // 数据数组
	public static int Counter = 1; // 计数器

	// ---------------------------------------------------
	// 折半查找法
	// ---------------------------------------------------
	public static boolean BinarySearch(int KeyValue) {
		int Left; // 左边界变量
		int Right; // 右边界变量
		int Middle; // 中位数变量

		Left = 0;
		Right = Max - 1;

		while (Left <= Right) {
			Middle = (Left + Right) / 2;
			if (KeyValue < Data[Middle]) // 欲查找值较小
				Right = Middle - 1; // 查找前半段
			// 欲查找值较大
			else if (KeyValue > Data[Middle])
				Left = Middle + 1; // 查找后半段
			// 查找到数据
			else if (KeyValue == Data[Middle]) {
				System.out.println("Data[" + Middle + "] = " + Data[Middle]);
				return true;
			}
			Counter++;
		}
		return false;
	}

	public static void main(String args[]) {
		int KeyValue = 22;
		// 调用折半查找
		if (BinarySearch((int) KeyValue)) {
			// 输出查找次数
			System.out.println("");
			System.out.println("Search Time = " + (int) Counter);
		} else {
			// 输出没有找到数据
			System.out.println("");
			System.out.println("No Found!!");
		}
	}

}

 

分享到:
评论

相关推荐

    折半查找算法在顺序表中插入一个元素讲解.pdf

    2. 不适合小规模数据:折半查找算法的时间复杂度为O(logn),但对于小规模数据,折半查找算法可能比线性查找算法慢。 折半查找算法是一种非常有用的查找算法,它可以快速地在已经排好序的顺序表中找到某个元素,并且...

    顺序查找和折半查找

    顺序查找是最简单的查找算法,适用于任何线性数据结构,如数组或链表。其基本思想是从数据集合的第一个元素开始,逐个与目标值进行比较,直到找到目标元素或者遍历完整个集合。如果找到目标元素,则返回其位置;否则...

    折半查找算法及matlab代码实现

    与线性查找相比,折半查找在最坏情况下的时间复杂度为O(log n),而线性查找的时间复杂度为O(n)。 **折半查找算法步骤如下:** 1. **初始化:**确定数组的起始位置(顶点top)和结束位置(底点bott)。 2. **中间...

    哈希、顺序、折半查找的算法代码

    本篇文章将详细讨论三种常见的查找算法:哈希查找、顺序查找和折半查找,并结合提供的文件名,我们将深入理解每种查找算法的实现原理以及它们在实际应用中的优缺点。 1. **哈希查找(Hash Find)** 哈希查找是一种...

    数据结构折半查找算法(C语言版)

    折半查找的时间复杂度为O(log n),远优于线性查找的O(n)。但该算法的前提是数据必须有序,因此常用于已排序的列表中。 在C语言中实现折半查找,我们需要定义一个函数,接收一个整型数组、数组长度以及待查找的目标...

    MFC动态演示线性查找和折半查找.zip

    本压缩包“MFC动态演示线性查找和折半查找.zip”提供了使用MFC实现的两种常见查找算法的动态演示:线性查找和折半查找。 **线性查找(Linear Search)** 线性查找是最基础的查找算法之一,适用于任何无序或有序的...

    数据结构实验七查找.doc

    实验七的主题是“查找”,主要涉及查找表、动态查找表、静态查找表和平均查找长度的概念,以及线性表中的顺序查找和折半查找方法。...通过这些练习,学生能深入理解查找算法和哈希表的工作原理,提高编程能力。

    数据结构查找、排序、二分查找、折半查找算法

    在这个主题中,我们主要关注查找和排序算法,特别是二分查找(折半查找)算法。这些算法在实际编程中具有广泛应用,包括数据库索引、搜索引擎优化和各种计算问题的解决。 首先,我们来看查找算法。查找是数据结构中...

    折半查找 C语言 算法

    本篇将详细探讨C语言中的折半查找(Binary Search)算法,这是一种在有序数组中寻找特定元素的搜索算法,其效率远高于线性查找。 折半查找的基本思想源于二分法,它利用了数组的有序性。当数组已经排序时,我们可以...

    顺序查找+折半查找

    **顺序查找**,也称为线性查找,是一种基本的查找算法,适用于任何类型的数据结构,尤其是链表和数组。它的基本思想是从数据集合的开头开始,逐个比较目标值与集合中的元素,直到找到目标值或者遍历完整个集合。如果...

    数据结构 顺序查找 折半查找

    顺序查找是最基础的查找算法之一,适用于任何线性结构,如数组或链表。它的基本思想是从数据集的第一个元素开始,逐个与目标值比较,直到找到匹配的元素或遍历完整个数据集。如果找到目标值,则返回其位置;若未找到...

    汇编课程设计 实现折半查找

    3. **折半查找**:用户输入要查找的数值,程序根据排序后的数据执行折半查找算法,更新搜索范围。 4. **返回结果**:如果找到目标值,显示其在排序后数组中的位置;如果没有找到,则给出相应的提示。 5. **循环处理*...

    数据结-构查找算法二分查找二叉顺序数哈希查找

    二分查找,也称为折半查找,适用于有序的线性表,如数组。算法的基本思路是将查找区间不断减半,每次比较中间元素与目标值,如果目标值等于中间元素则查找成功,否则根据目标值与中间元素的大小关系缩小查找区间。...

    二叉排序树和折半查找

    折半查找的时间复杂度是O(logn),因为每次查找都使搜索范围减半,相比线性查找的O(n)效率更高。但折半查找依赖于数据的有序性,对于无序数据并不适用。 7. **二叉排序树与折半查找的关系**: 虽然二叉排序树和...

    顺序查找和折半查找(C语言)

    折半查找是一种更高效的查找算法,它仅适用于已排序的列表。其核心思想是在每一步将搜索范围减半,从而快速定位目标值。 #### 实现细节: 在给定的代码中,折半查找通过`Search_Bin`函数实现。首先,设置两个指针`...

    折半算法c语言小程序

    因此,对于大数据量的有序数组,折半查找相比线性查找具有显著优势。 总结起来,这个C语言程序实现了折半查找算法,展示了如何在有序数据结构中高效地查找目标元素。通过理解这个程序,我们可以更好地掌握折半算法...

    C#基础查找算法的分析,实现

    本文将详细解析C#中的基础查找算法,包括静态查找与动态查找、内查找与外查找,以及两种具体的查找算法:顺序查找(线性查找)和二叉查找(折半查找)。这些算法在数据处理、数据库操作和优化搜索效率等方面有着广泛...

    C#Windows窗体模拟折半查找程序

    折半查找,也称为二分查找,是一种在有序数组中寻找特定元素的有效方法,它的效率显著高于线性查找。 首先,我们需要了解折半查找的基本原理。折半查找适用于已排序的数组或列表。其步骤如下: 1. **设定边界**:...

    C++折半查找代码实现

    1. **高效性**:相比于线性查找,折半查找的时间复杂度为O(logN),在数据量较大时效率非常高。 2. **有序性**:折半查找要求待查数组是有序的,可以是升序也可以是降序。 3. **应用场景**:适用于数据量大且经常需要...

    (VC6.0++环境)折半查找算法的实现

    在计算机科学中,折半查找(也称为二分查找)是一种高效的查找算法,尤其适用于已排序的数据集合。本文将深入探讨折半查找算法的概念、原理、实现方式,并以C语言为例,详细介绍如何在VC6.0++环境中实现这一算法。 ...

Global site tag (gtag.js) - Google Analytics