`
韩悠悠
  • 浏览: 827247 次
  • 性别: 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!!");
		}
	}

}

 

分享到:
评论

相关推荐

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

    静态查找和动态查找 内查找和外查找 顺序查找又称线性查找(Sequential Search) 二叉查找算法:二分查找又称折半查找(Binary Search)

    折半查找(二分查找)详解

    折半查找(又称二分查找)是一种高效的查找算法,适用于已排序的数组或列表。其基本思想是将待查找的元素与数组中间元素进行比较,如果相等则返回该元素的下标;如果待查找元素小于中间元素,则在数组左半部分继续...

    [数据结构与算法] 查找算法

    查找算法 线性查找二分查找差值查找斐波那契查找 鉴于在排序算法时, 搞得比较乱的情况, 导致查找不太方便. 因此, 在写查找算法时, 我会将所有的东西都写在一起, 便于查找和阅读 在java中,我们常用的查找有四种: ...

    实现顺序查找、折半查找和散列表的查找功能

    折半查找: 利用数组存储元素,使用二分搜索来查找目标值。 散列表: 使用数组实现哈希表,利用散列函数和线性探测法解决冲突。 用户可以选择在生成的随机数中查找目标值,程序会根据用户选择的算法来执行相应的查找...

    数据结构-改进的线性查找算法(c++)实现

    线性查找又称顺序查找,其基本思想位:从线性表的一端向另一端逐个将记录与给定值进行比较,若相等,则查找成功...本文所述的线性查找算法位改进的,增设了许多功能,有:折半查找,分块查找,插值查找,斐波拉契查找。

    西门子PLC快速查找数据算法

    那这就是一个典型的底层实现结构是一个数组,数组类型可以是任意类型,而且数组下表是有序的,那我们完全可以使用折半查找代替遍历整个表,以此通过算法节省CPU扫描时间,提升设备相应速度!(如定义1...10,快速找到...

    C/C++常用算法手册.秦姣华(有详细书签).rar

    5.4.1 顺序表结构中的查找算法 145 5.4.2 链表结构中的查找算法 148 5.4.3 树结构中的查找算法 151 5.4.4 图结构中的查找算法 152 5.5 小结 153 第6章 基本数学问题 154 6.1 判断闰年 154 6.2 多项式计算 ...

    数据结构第九章 查找作业及答案(100分).docx

    4.已知一个有序表为{12,18,24,35,47,50,62,83,90,115,134},当折半查找值为90的元素时,经过( )次比较后查找成功。 A.2 B.3 C.4 D.5 5.已知数据序列为(34,76,45,18,26,54,92,65),按照...

    Python语言进阶知识点总结

    数据结构和算法 算法:解决问题的方法和步骤 评价算法的好坏:渐近时间复杂度和渐近空间复杂度。 渐近时间复杂度的大O标记: – 常量时间复杂度 – 布隆过滤器...排序算法(选择、冒泡和归并)和查找算法(顺序和折半)

    C++折半插入排序详解以及代码实现

    在直接插入排序中,我们使用线性搜索来找到新元素应该插入的位置,而在折半插入排序中,我们使用二分搜索来加快查找速度。 以下是折半插入排序的详细步骤: 1. 从第一个元素开始,该元素可以认为已经被排序。 2. ...

    javascript常用经典算法实例详解

    入门级算法-线性查找-时间复杂度O(n)–相当于算法界中的HelloWorld //线性搜索(入门HelloWorld) //A为数组,x为要搜索的值 function linearSearch(A, x) { for (var i = 0; i &lt; A.length; i++) { if (A[i] == ...

    JavaScrip常见的一些算法总结

    下面就简单列举一下javascript中常见的一些算法,需要的朋友可以做一下参考。当然这些算法不仅仅适用于javascript,同样也...又称折半查找,适用于已排好序的线性结构。 //A为已按"升序排列"的数组,x为要查询的元素

    《妙趣横生的算法(C语言实现)》(杨峰 编著)

    3.4.3 递归的折半查找算法 3.5 贪心算法思想 3.5.1 基本概念 3.5.2 最优装船问题 3.6 回溯法 3.6.1 基本概念 3.6.2 四皇后问题求解 3.7 数值概率算法 3.7.1 基本概念 3.7.2 计算定积分 第2部分 编程实例解析 第4章 ...

    华南 数据结构上机实验代码 完整代码

    线性链表逆置 顺序栈的基本操作 循环队列的基本操作 栈的应用——进制转换 括号匹配检验 行编辑程序 表达式求值 队列的应用——银行客户平均等待时间 计算next值 KMP算法 二叉树的构建及遍历操作 实现...

    C++大学教程,一本适合初学者的入门教材(part1)

    4.8 查找数组:线性查找与折半查找 4.9 多下标数组 4.10 有关对象的思考:确定类的行为 小结 术语 自测练习 自测练习答案 练习 递归练习 第5章 指针与字符串 5.1 简介 5.2 指针变量的声明与初始化 5.3 指针...

    C++大学教程,一本适合初学者的入门教材(part2)

    4.8 查找数组:线性查找与折半查找 4.9 多下标数组 4.10 有关对象的思考:确定类的行为 小结 术语 自测练习 自测练习答案 练习 递归练习 第5章 指针与字符串 5.1 简介 5.2 指针变量的声明与初始化 5.3 指针...

    嵌入式系统软件设计中的数据结构

    排序和查找算法等。  本书从嵌入式系统的实际硬件环境出发,用通俗易懂的语言代替枯燥难懂的理论解释,结合嵌入式系统的应用实例,使读者在比较轻松的条件下将“数据结构”的基本知识学到手。  本书可作为从事...

    天津大学《计算机软件技术基础(2)》在线作业二.docx

    A:分时系统 B:多道批处理系统 C:实时系统 D:网络操作系统 参考选项:B 若在线性表中采用折半查找法查找元素,该线性表应该 ( ) A:元素按值有序 B:采用顺序存储结构 C:元素按值有序,且采用顺序存储结构 D:元素按值...

    数据结构(C++)有关练习题

    &lt;br&gt;实验四 综合(课程设计) 内容及步骤: 1、假定一维数组a[n]中的每个元素值均在[0,200]区间内,用C++编写一个算法,分别统计出落在[0,20],[21,50],[51,80],[81,130],[131,200]等各区间内的元素...

    高校数据结构期末考题库

    18、折半搜索只适用与有序表,包括有序的顺序表和有序的链表。( ) 19、堆栈在数据中的存储原则是先进先出。( ) 20、队列在数据中的存储原则是后进先出。( ) 21、用相邻矩阵表示图所用的存储空间大小与图的边数...

Global site tag (gtag.js) - Google Analytics