用c语言编写二分查找法
二分法的适用范围为有序数列,这方面很有局限性。
#include<stdio.h> //二分查找法
void binary_search(int a[],int start,int mid,int end); int main()
{
int iLength,istars,i,iTimes,iNumber,n;
int a[];
printf("please enter the length of the array:\n ");
scanf("%d",&iLength);
printf("please enter the number:\n");
for(i=;i<iLength;i++)
{
scanf("%d",&a[i]);
} printf("please enter the number that you want:\n");
scanf("%d",&istars);
/*if(n==istars)
{ }
else
{
printf("sorry ,without this number\n");
}*/
binary_search(a,,istars,iLength); }
void binary_search(int a[],int start,int iPut,int end) {
int i,j,k,n;
i=start;
j=end;
k=(i+j)/;
n=;
while(i<j)
//while(i<=k && j>=k) 这个写的本身就有漏洞,就是对整个程序的不理解
{
n++;
if(iPut>a[k])
{
i=k+;
}
if(iPut<a[k])
{
j=k-;
}
if(iPut==a[k])
{
printf("the number need %d times to find......a[%d]=%d\n",n,k,iPut); break;
} }
if(n==0)
printf("failed\n"); }
这是开始参考书目,自己编写的程序,但是程序本身能准确运行范围内的数字,一旦输入范围外的数字则出现卡壳现象。因此,要在源代码中改进。
#include<stdio.h> //二分查找法
void binary_search(int a[],int start,int iPut,int end); int main()
{
int iLength,istars,i,iTimes,iNumber,n;
int a[];
printf("please enter the length of the array:\n ");
scanf("%d",&iLength);
printf("please enter the number:\n");
for(i=;i<iLength;i++)
{
scanf("%d",&a[i]);
} printf("please enter the number that you want:\n");
scanf("%d",&istars);
/*if(n==istars)
{ }
else
{
printf("sorry ,without this number\n");
}*/
binary_search(a,,istars,iLength); }
void binary_search(int a[],int start,int iPut,int end) {
int i,j,k,n,m;
m=;
i=start;
j=end; n=;
while(i<j)
//while(i<=k && j>=k) 这个写的本身就有漏洞,就是对整个程序的不理解
{
n++;
k=(i+j)/;//这个为关键!!!!!
if(iPut>a[k])
{
i=k+;
}
if(iPut<a[k])
{
j=k-;
}
if(iPut==a[k])
{
printf("the number need %d times to find......a[%d]=%d\n",n,k,iPut);
m++;
break;
} }
if(m==)
printf("failed\n"); }
第一次代码错误的主要原因为中间值k的位置放错了。k要放在循环之中,要不然无法形成循环,中间值就永远都是中间值,无法利用其的逼近功能,
与此同时编写代码多了,时常会把 if 和while用混,这就需要具体问题,if只执行一次,while则是一个循环,使用while的时候要写上跳出条件,要不然会无休止的运行下去,导致死循环。
用c语言编写二分查找法的更多相关文章
- R语言实现二分查找法
二分查找时间复杂度O(h)=O(log2n),具备非常高的效率,用R处理数据时有时候需要用到二分查找法以便快速定位 Rbisect <- function(lst, value){ low=1 ...
- C语言二分查找法
参考了C语言中折半查找法(二分法)的实现 二分查找算法(C语言实现) 先附上代码 #include<stdio.h> int BinSearch(int arr[],int len,int ...
- 【C/C++学院】0723-32位与64位/调戏窗体程序/数据分离算法/内存检索/二分查找法/myVC
[送给在路上的程序猿] 对于一个开发人员而言,能够胜任系统中随意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并能够运用到系统中,由此简化系统的开发,是其架构生涯的第一步. ...
- InnoDB索引概述,二分查找法,平衡二叉树
索引是应用程序设计和开发的一个重要方面.如果索引太多,应用的性能可能会受到影响:如果索引太少,对查询性能又会产生影响.要找到一个合适的平衡点,这对应用的性能至关重要. 如果知道数据的使用,从一开始就应 ...
- jvascript 顺序查找和二分查找法
第一种:顺序查找法 中心思想:和数组中的值逐个比对! /* * 参数说明: * array:传入数组 * findVal:传入需要查找的数 */ function Orderseach(array,f ...
- java for循环和数组--冒泡排序、二分查找法
//100以内与7相关的数 for(int a=1;a<=100;a++){ if(a%7==0||a%10==7||a/10==7){ System.out.print(a+ ...
- 二分查找法 java
前几天去面试,让我写二分查找法,真是哔了狗! 提了离职申请,没事写写吧! 首先二分查找是在一堆有序的序列中找到指定的结果. public class Erfen { public static int ...
- 学习练习 java 二分查找法
package com.hanqi; import java.util.*; public class Test5 { public static void main(String[] args) { ...
- Java-数据结构与算法-二分查找法
1.二分查找法思路:不断缩小范围,直到low <= high 2.代码: package Test; import java.util.Arrays; public class BinarySe ...
随机推荐
- Nhiberate (三)测试
(一)添加数据: public void AddUser(User user) { ISession session = NhibernateFactory.GetInstance().GetSess ...
- SQL Server 导入 MDF LDF文件
EXEC sp_attach_db @dbname = 'OA', @filename1 = 'C:\OA.mdf', @filename2 = 'C:\OA_log.ldf'
- Mysql乱码
MySql字符集 1.系统默认的.数据库默认的.表格默认的.列的 真正决定权在列定义上 2.latin1 系统默认字符编码 字符范围是0x00-0xff,可以存放任意编码的字符序列. 3.utf8编码 ...
- 自动插入数据sql
oracle自动插入一定大小的数据: create tablespace TABLESPACE datafile 'E:\TABLESPACE.dbf' size 10g autoextend on ...
- Struts 404 The requested resource is not available
出现这种错误一般是struts.xml配置错误,重点针对<action> 的class属性的全名 因为struts感觉应该是先加载所有的配置文件,如果配置文件有错误的话,所有的资源就都无效 ...
- windows安装TortoiseGit详细使用教程
标签:tortoisegit 环境:win8.1 64bit 安装准备: 首先你得安装windows下的git msysgit1.9.5 别下载错,不习惯英文的朋友,也可以下个语言包] 一.安装图解: ...
- .NET学习记录2
前面回忆了一些C#基础语法,简单整理了一下笔记,要想深入研究的话,那就得找一本比较好的书了.接下来继续回忆C#语法知识. 方法 功能:用来复用代码的.当我们在一个程序 中反复的写了同样的代码,那么一般 ...
- mysql时间格式DATE_FORMAT()
1.以下是mysql查询中用到的时间格式的转化形式例子:SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') -- 2015-10-28 SELECT DATE_FORMAT(NO ...
- 智能家居常用WiFi模块
WiFi模块 WiFi模块就是整个系统的控制中心,控制很简单,就是输出一个开关信号控制继电器,而这个模块的核心是WiFi的连接,手机连接WiFi时需要扫描,输入密码,而这类本身没有屏幕和键盘的硬件设备 ...
- 方法过滤器,分布式缓存 Memcached实现Session解决方案
控制器-〉方法过滤器-〉controller-> 方法 所以通过建立controller基类的方法进行方法过滤,所有控制器先执行基类的OnActionExecuting 方法. using Sp ...