- 浏览: 39535 次
- 性别:
- 来自: 北京
文章分类
最新评论
为了提高查找效率,在一个数组中查找某个数据是否存在时,可以先将数组数据排序,将排序后的数列的中点设置为比较的对象,如果要找的元素的值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。即根据比较的结果排除掉数组一半的元素,再在余下的一半数组元素中取中间的一个元素进行比较,并根据比较的结果再次排除一半的数组元素,以此类推,直至最终找到为止。这就是二分查找(Binary Search),由于二分查找法每次都根据比较结果排除一半的数据,因此也称为“折半查找法”。二分查找的先决条件是:查找表中的数据元素必须有序。在二分法中,只能对递增的数组进行查找。
算法步骤:
1、首先是确定整个查找区间的中间位置,mid = ( left + right )/2;
2、用待查数据的值与中间位置的数据值进行比较:若相等,则查找成功;若大于,则在后半区域继续进行二分查找;若小于,则在前半区域继续进行二分查找。(这步是循环的过程)
3、用二分查找法对确定后的区域再次进行范围缩小的查找,直到查找到结果为止。
下面举个例子:用随机函数rand产生一个100内的10个元素的数组,用键盘输入一个数字,用二分法查找。若找到打印出位置,若没有,则输入无次数。
#include <stdio.h> #include <stdlib.h> void main() { int a[10],i,j,temp,min,t,site; for(i=0;i<10;i++) { a[i]=rand()%101;//用随机函数产生一个--100的包含个元素的无序数组 /*printf("%d ",a[i]);*/ } printf("随机产生的数组为:"); for(i=0;i<10;i++) printf("%d ",a[i]); //以上为随机产生数组过程 printf("\n");//换行 for(i=0;i<10;i++) { min=a[i]; t=i; for(j=i+1;j<10;j++) { if(a[j]<min) { min=a[j]; t=j; } } temp=a[i]; a[i]=a[t]; a[t]=temp; /*printf("%d ",a[i]);*/ //在这里输出排序后的数组也可以。 } printf("排序后的数组为:"); for(i=0;i<10;i++) printf("%d ",a[i]); //以上为排序过程 printf("\n"); //换行 printf("请输入要查找的数字:"); int find; scanf("%d",&find); int low = 0;//定义数组低位下标并赋初值 int high = 9;//定义数组高位下标并赋初值 int mid;//定义数组中间下标 site = -1; while(low<=high) { mid=(low+high)/2; if(find==a[mid]) { site=mid;//将找到的下标值赋给site,site主要用来记录所找数的位置 break; } else { if(find<a[mid]) high=mid-1;//将高位往左移,确定查找的终点。用high=mid也可以,只是多计算一次。 else low=mid+1;//将低位往右移,确定查找的起点。用low=mid也可以,只是多计算一次。 } } if(site != -1) printf("找到了你所需要查找的数字%d,是第%d个数\n",find,site+1); else printf("没有找到你输入的数字。"); //以上为二分法查找过程 }
发表评论
-
String中的小问题2
2010-10-25 14:24 68//题目;收集顾客反馈意见信息(用户输入的自己姓名、联系方 ... -
斐波那契数列
2010-10-25 14:23 160/**题目:斐波那契数列 * 求fibonacci数列 ... -
String中的小问题
2010-10-25 14:22 90/**题目1: * 给定一个字符串"Aaaa ... -
四种操作xml的方式: SAX, DOM, JDOM , DOM4J的比较
2010-10-25 13:43 57四种操作xml的方式: SAX, DOM, JDOM ... -
用Dom4j解析XML及中文问题
2010-10-25 13:42 301用Dom4j解析XML及中文问题(转载) ... -
Dom4j的使用(转至CSDN)
2010-10-25 13:32 74Dom4j 使用简介 DOM4J ... -
JSON入门二
2010-10-25 13:29 683JSON 的真正价值 正如在上一篇文章 中所描 ... -
JSON入门一
2010-10-25 13:27 738在异步应用程序中发送和接收信息时,可以选择以纯文本和 X ... -
a href="#" 与 a href="javascript:void(0)" 的区别(转)
2010-10-25 13:25 810a href="#" 与 a h ... -
浅谈java中的冒泡排序法
2010-10-25 13:13 1897冒泡排序法 冒泡 ... -
浅谈java中的选择排序法
2010-10-25 13:12 1433选择排序法 选择 ... -
约瑟夫环2
2010-10-25 13:06 210方法二:用面向对象的思想来解决问题 在同一个包里新建 ... -
约瑟夫环
2010-10-25 13:03 1092著名的约瑟夫环问题详解 问题概述: 已知n个人( ... -
Java中实现对象比较的几个相关概念
2010-10-25 12:54 813在Java中实现对象比较的几个相关概念(转) 一、跟对象 ...
相关推荐
二分查找 C语言语言源代码 用递归写的 C语言入门经典代码 值得收藏
折半查找(也称为二分查找)是一种在有序数组中查找特定元素的高效算法。其基本思想是:每次都将搜索区间分为两部分,并根据中间值与目标值的比较结果来缩小搜索范围,直至找到目标值或搜索区间为空为止。 具体步骤...
二分查找,也称为折半查找,是一种在有序数据集中查找特定元素的算法。它的高效性使得二分查找在多种应用场景中成为首选的搜索算法。下面我们将从原理、应用、性能分析及扩展变种等方面进行详细探讨。 二分查找的...
本项目主要涉及两种查找算法:哈希查找(Hash Search)和二分查找(Binary Search),并且应用在统计C语言源文件中的关键字个数。下面将详细阐述这两种查找算法以及它们在本项目中的具体应用。 哈希查找是一种高效...
折半查找,又称二分查找,是一种在有序数组中查找特定元素的搜索算法。它的基本思想是通过比较中间元素和目标值,将搜索范围不断缩小为一半,直到找到目标值或者搜索范围为空。这种方法相对于线性查找有显著的效率...
二分查找,也称为折半查找,是一种在有序数组中搜索特定元素的高效算法。它的工作原理是通过不断地将待搜索区域减半来快速定位目标值。这种算法在计算机科学和编程领域中有着广泛的应用,特别是在大数据量的场景下,...
折半查找(也称为二分查找)是一种高效的查找算法,适用于已排序的数据集合。在这个场景中,我们将探讨如何使用C语言实现顺序表上的折半查找。 **一、折半查找原理** 折半查找的思想是将有序数组分为两个部分,...
### 二、折半查找(二分查找) 折半查找是一种更高效的查找算法,它仅适用于已排序的列表。其核心思想是在每一步将搜索范围减半,从而快速定位目标值。 #### 实现细节: 在给定的代码中,折半查找通过`Search_Bin...
折半查找,又称二分查找,是一种在有序数组中查找特定元素的搜索算法。它的基本思想是通过比较中间元素和目标值,将搜索范围不断缩小一半,直到找到目标元素或者搜索范围为空。这个方法非常高效,尤其对于大型有序...
折半查找利用了二分的思想,每次将序列分为两半,先判断目标值在哪一半,然后只在那一半中继续查找,直到找到目标值或确定目标值不在序列中。这种方法显著减少了查找次数,尤其在大数据量时优势明显。C语言中的折半...
这里我们聚焦于四个关键概念:顺序查找表、二分查找表(也称折半查找表)、二叉排序树以及C#编程语言。这些知识点在计算机科学和软件工程中都有着广泛的应用。 1. **顺序查找表**: 顺序查找是最基础的查找方法,...
折半算法,又称二分查找算法,是一种在有序数组中高效查找特定元素的搜索算法。它充分利用了数组的有序性,每次将搜索范围减半,从而大大减少了查找时间。本文将通过一个C语言小程序来详细解析折半查找的原理和实现...
而在折半插入排序中,我们通过二分查找来确定插入位置,这大大减少了比较次数,尤其是在处理大量数据时,效果显著。 以下是C语言实现折半插入排序的主要步骤: 1. 初始化:创建一个空的已排序部分,通常是一个只有...
而折半查找,又称为二分查找,只适用于已经排序的数组。它的基本思想是利用数组的有序性来减少查找次数。在给定的10个元素中,如果已按升序排列,折半查找会首先比较中间元素的值。如果中间元素等于20,查找结束;...
折半查找,也称为二分查找,是一种在有序数组中查找特定元素的有效方法。它的基本思想是,首先确定中间元素,然后比较目标值与中间元素,如果目标值等于中间元素,查找结束;如果目标值小于中间元素,那么在数组的左...
二分查找,又称折半查找,是一种在有序数组中寻找特定元素的搜索算法。它的基本原理是通过不断将待搜索的区间减半,快速定位到目标元素。在每次比较时,算法都会取数组的中间元素与目标值进行比较,根据比较结果决定...
分别用递归和非递归方法实现二分查找算法 的完整程序,indexof()返回的是循环实现的二分法查找,getindex()实现的是递归算法实现的二分法查找。
折半查找,又称二分查找,是一种在有序数据集合中高效搜索特定元素的算法。它主要应用于已排序的数组或列表,通过不断缩小搜索范围来提高查找效率。下面将详细介绍折半查找的基本思想、特点、适用场景以及具体的代码...
在⼀个升序的数组中查找制定的数字n,很容易想到的⽅法就是遍历数组,但是这种⽅法效率⽐较低, ⽐如我买了一件衣服,你好奇问我多少钱,我说不超过300元。...此文件就是关于C语言的二分查找的代码
最后,我们讨论折半查找,也称为二分查找。这是一种在有序数组中查找特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是目标值,则搜索结束;如果目标值大于或小于中间元素,则在数组大于或小于...