数组元素查找中的线性查找和折半查找
线性查找就是把要查找的关键字与数组中的元素逐个进行比较来进行查找;
而对于有序排列的数组而言,折半查找把要查找的关键字先与数组中间的元素进行比较,如果相同就可以结束查找;如果不同的话,比较关键字和中间元素的大小,关键字大于中间元素的话就在数组后半边查找,小于中间元素的话就在数组前半边查找。
线性查找适合于规模较小的数组或者无序排列的数组。对于有序排列的大规模数组而言用线性查找的方法可能非常慢。
举例而言,有个有序排列的数组,从1到2047有元素个数2047,我们采用折半查找,最坏的情况只需要进行11次比较。因为我们先和(1+2047)/2=1024比较,再和(1023+1)/2=512比较,再和256、128、64、32、16、8、4、2、1比较。而如果我们用线性查找的话,最坏情况下需要比较2047次。数量再大一些,这两种方法的差距就会更大。有2的n次方减一个元素,线性方法就要比较2的n次方减一次,而折半查找只需要n次。
下面是一个利用折半查找法的例子:
#include<stdio.h>
#define SIZE 15/*定义数组的大小*/int binary(const int a[],int searchKey,int low,int high);/*折半查找*/
void guocheng(const int a[],int low,int mid,int high);/*打印每次查找的子数组,并把中间值后面用*标记*/int main(void)
{int a[SIZE];int i;int key;int result;for (i=0;i<SIZE;i++){a[i]=2*i;}printf("请输入一个数字(0~%d)",(SIZE-1)*2);scanf("%d",&key);printf("元素号为:\n");for(int i=0;i<SIZE;i++){printf("%3d ",i); }printf("\n");for (int i=1;i<=SIZE;i++){printf("___ ");} printf("\n"); result=binary(a,key,0,SIZE-1);if(result==-1){printf("找不到%d",key);}else {printf("在位置%d处找到%d",result,key);}
}int binary(const int a[],int searchKey,int low,int high)
{int mid;while(low<=high){mid=(low+high)/2;guocheng(a,low,mid,high);if (searchKey==a[mid]){return mid;/*在数组中找到了关键字,就返回mid值*/}else if(searchKey!=a[mid]){if (searchKey>a[mid] ){low=mid+1;}else {high=mid-1;}}}return -1;/*在数组中没找打这个关键字,就返回-1*/
}void guocheng(const int a[],int low,int mid,int high)
{for (int i=0;i<SIZE;i++){if(i<low||i>high){printf(" ");}else if(i==mid){printf("%3d*",a[i]);}else {printf("%3d ",a[i]);}}printf("\n");
}
数组元素查找中的线性查找和折半查找相关推荐
- php for调用数组元素,php中foreach语句如何用于数组元素
php中除了for语句和while语句以外,还有用来处理数组循环的foreach语句,foreach语句是一个循环数组元素的语句,本篇文章就来给大家介绍关于php中foreach语句的用法. 我们先来 ...
- 二叉树 查找失败 asl_算法——二分搜索amp;折半查找
☞能够掌握求解的算法,并给出详细的执行过程. ☞对于折半搜索二叉树中,若根结点在第1层, 且分枝结点数为= 2& − 1,则外部结点均在第ℎ + 1层. 这同样也是一种利用分治法设计的查找算法 ...
- 用java写一个折半查找_用Java写一个折半查找。
import java.util.Comparator; public class MyUtil { public static > int binarySearch(T[] x, T key) ...
- c语言折半查找法找字符,C语言折半查找法练习题冒泡排序
MongoDB管理工具的插件系统 MongoDB管理工具 MongoCola的开发已经进入第三个年头了. 官方对于C#驱动的投入不够导致了很多东西都必须自己实现,但是不管怎么样,工具现在已经很强大了 ...
- php访问数组用引号_php双引号中访问数组元素报错如何解决
最近在做微信公众号开发,在一个发送图文接口中,需要把数组元素拼接在XML字符串中,本文主要和大家分享一篇基于php双引号中访问数组元素报错的解决方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小 ...
- 查找:线性表的C语言代码实现(顺序查找、折半查找)
目录 一.线性表结构 两个类的定义 二.线性表的初始化以及根据输入的元素建立线性表 1.线性表的初始化,初始化一个空的线性表 2.根据用户需求,向线性表中添加元素 三.顺序查找 Search1函数( ...
- C语言中 二维数组在内存中的存放顺序是,在计算机中二维数组的元素是按行顺序存放的,即在内存中,先顺序存放二维数组第一行的元素,再顺序存放二维数组第二行的元素,以此类推 答案:对...
相关问题 服装时尚流行趋势包含哪些元素 中国大学MOOC: 在本征半导体中掺入三价元素的杂质半导体的自由电子是( ). 下列说法正确的有( ).: 说法 逻辑 关系 上 数据 结构 类 线性 结构 结 ...
- 数据结构折半查找例题_山东2011专升本计算机专业数据结构练习题 - 图文
第 47 页 共 63 页 济南铁道职业技术学院 专升本辅导教材 数据结构 { p=(EdgeNode *) malloc(sizeof(EdgeNode)); p->weight= (2) ; ...
- 408数据结构学习笔记——顺序查找、折半查找、分块查找
目录 1.顺序查找 1.1.顺序查找的概念 1.2.顺序查找的代码 1.3.顺序查找的查找效率 1.4.顺序查找的优化 1.5.顺序表的时间复杂度 2.折半查找 2.1.折半查找的概念 2.2.折半查 ...
最新文章
- 如何破解天翼HG260光纤猫【转】
- 编译实验(一)词法分析
- python无需修改是什么特性_用户编写的python程序无需修改就可以在不同的平台运行,是python的什么特征...
- C# JArray与JObject 的使用
- LintCode 550. 最常使用的K个单词II(自定义set(可修改数据的优先队列) + map)
- 2021中国新物业服务发展白皮书
- java 文曲星猜数字,文曲星里的猜数字代码(原创)
- html里面textfield属性,StyleableTextField的CSS属性htmlText
- 10.2. Incron - cron-like daemon which handles filesystem events
- 《大道至简》的幕后故事(2):“愚公移山记”人物篇
- Download ebook from Syngress Publishing
- 蓝桥杯 C语言 试题 历届试题 格子刷油漆
- DELMIA软件:机器人与行走轴联动实现长焊缝弧焊焊接虚拟仿真
- Android 常用简单bat脚本
- 程序员有七个等级?你又属于哪个等级呢?
- flasgger手写phpwind接口文档
- 在centos7 下安装python3.6
- 2022-2028全球月桂醇磷酸酯(MAE)行业调研及趋势分析报告
- baud rate - 波特率
- 有限公司跟有限责任公司是什么