首页 > 其他分享 >数据结构之折半查找

数据结构之折半查找

时间:2024-07-09 21:26:45浏览次数:12  
标签:折半 int 元素 mid high 查找 key 数据结构

 

折半查找的算法思想:

折半查找又称二分查找,它仅仅适用于有序的顺表。
折半查找的基本思想:首先将给定值key与表中中间位置的元素(mid的指向元素)比较。mid=low+high/2(向下取整)

  1. 若key与中间元素相等,则查找成功,返回该元素的存储位置,即mid;
  2. 若key与中间元素不相等,则所需查找的元素只能在中间元素以外的前半部分或后半部分。(至于是前半部分还是后半部分要看key与mid所指向元素的大小关系)
    a.在查找表升序排列的情况下,若给定值key大于中间元素则所查找的元素只可能在后半部分。此时让low=mid+1;
    b.若给定值key小于中间元素则所查找的元素只可能在前半部分。此时让high=mid-1;
#include<stdio.h>
//折半查找   主要方法
int Binary_search(int *array,int length,int key){
	int low=1,high=length,mid;  //如果不浪费空间  则low=0;high=length-1 
	while(low<=high){  //退出循环条件为low>high

		mid=(low+high)/2;
		if(array[mid] == key) return mid;
		else if(array[mid]>key) high=mid-1;
		else low = mid+1;
		
	}
	return -1;
}

int main(){
	
	int a[16]={0},key,temp;//浪费一个空间即下标0   用于对齐 下标 
	printf("请输入15个有序数字:\n"); 
	for(int i=1;i<=15;i++)
	scanf("%d",&a[i]);
	
	printf("请输入所要查找的数字:\n"); 
	scanf("%d",&key);
	
	temp=Binary_search(a,15,key);
	
	if(temp==-1)
		printf("不存在\n"); 
		
	else
	 printf("下标为%d\n",temp); 	 
	
	return 0;

}

标签:折半,int,元素,mid,high,查找,key,数据结构
From: https://blog.csdn.net/weixin_63356609/article/details/140307127

相关文章

  • Dotnet算法与数据结构:Hashset, List对比
    哈希集A是存储唯一元素的集合。它通过在内部使用哈希表来实现这一点,该哈希表为基本操作(如添加、删除和包含)提供恒定时间平均复杂度(O(1))。此外,不允许重复元素,使其成为唯一性至关重要的场景的理想选择。另一方面,表示按顺序存储元素的动态数组。它允许重复元素并提供对元素的索引......
  • 二分查找的循环条件及指针终止位置问题
    二分查找的循环条件及指针终止位置问题常见的二分搜索法的循环迭代方法分为:左闭右开和左闭右闭两种方式左闭右开:由于右边界开放,例如[1,1)是矛盾的,因此循环条件为while(l<r)。闭合指后续迭代仍需要进行对其元素进行比较。因此每次迭代结束,左指针l移动到中点的下一位l=mi......
  • 小学期数据结构——消球游戏
    消球游戏设计一个程序实现消球游戏:在棋盘内,一开始随机初始化三个不同色小球,一次可移动一个小球至空白位置,当同色5个小球连成直线,横、竖、对角均可,则小球消除并得分。消除1个小球得1分,当小球移动1次没有消除时,系统会自动随机产生三个小球。基本要求:(1)要求实现图形化界面,可......
  • 【数据结构】模块一:线性存储
    数据结构的学习大致可以分为三个模块,分别是:线性结构,非线性结构,查找和排序。首先从线性结构开始学起:线性结构,简单地说,就是把所有的结点用一根直线穿起来。线性结构可以分为连续存储(数组)和离散存储(链表)两种存储方式,共有两种常见的应用,即栈和队列,其二者只不过是简化版的数组......
  • 【Py/Java/C++三种语言OD独家2024D卷真题】20天拿下华为OD笔试之【前缀和/固定滑窗】2
    有LeetCode算法/华为OD考试扣扣交流群可加948025485可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录题目描述与示例题目描述输入描述输出描述示例一输入输出说明示例二输入输出说明解题思路贪心思想......
  • 数据结构第17节 最小堆
    最小堆(MinHeap)是一种特殊的完全二叉树数据结构,在这种结构中,对于任意节点,其值都小于或等于它的子节点的值。根节点是堆中的最小元素。最小堆常用于实现优先队列,以及堆排序算法。在Java中,我们可以使用数组或ArrayList来实现最小堆,因为完全二叉树的特性允许我们通过简单的数......
  • 数据结构第18节 散列表
    散列表(HashTable),也称为哈希表,是一种数据结构,它使用哈希函数将键映射到数组的一个索引位置,从而可以快速地插入、查找和删除数据。散列表的核心在于哈希函数和解决冲突的策略。在Java中,散列表的实现通常涉及以下几个关键部分:哈希函数:用于将键转换为数组索引。解决冲突:多个......
  • 数据结构——二叉树之c语言实现堆与堆排序
    目录前言:1.二叉树的概念及结构1.1特殊的二叉树 1.2二叉树的存储结构  1.顺序存储2.链式存储 2.二叉树的顺序结构及实现 2.1堆的概念   ​编辑2.2堆的创建3.堆的实现3.1堆的初始化和销毁 初始化:销毁: 插入:向上调整:删除: 向下调整: 堆顶元素......
  • 【Redis 理论与实践学习】 一、Redis的数据结构:4.Set类型
    文章目录简介Set和List的区别常用命令增删改查类命令添加元素移除元素判断元素是否存在获取集合大小获取集合所有成员随机获取元素随机移除并返回元素运算操作命令集合间操作集合间操作并存储应用场景博客点赞用户点赞操作公众号共同关注用户关注集合共同关注查询......
  • Python数据结构详解:列表、字典、集合与元组的使用技巧
    前言哈喽,大家好!今天我要和大家分享的是关于Python中最常用的数据结构:列表、字典、集合和元组的使用技巧。你有没有遇到过在处理数据时,不知道该用哪种数据结构来存储和操作数据的情况呢?别担心,今天这篇文章就来帮你搞定这些问题,让你在数据处理上更加得心应手。最后,别忘了关......