(经典) K&R的名著<<C程序设计语言>>二分查找

#include<stdio.h>

//查找成功则返回所在下标否则返回-1
int binsearch(int A[], int n,int a)
{
   int low, high, mid;
   low = 0;
   high = n -1;
   while ( low <= high) {    /// 这里必须是 <=
        mid = (low+high) / 2;
        if (A[mid] == a)
           return mid;
        else if(A[mid]<a)
           low = mid +1;
        else
           high=mid-1;
    }
   return -1;
}

int main()
{   int a[]={1,2,44,44,99};
    printf("%d",binsearch(a,5,44));
}
//二分查找,递归算法
#include <iostream>
#include<stdio.h>

using namespace std;

int binSearch(int a[],int low,int high,int b)
{
    int mid = (high-low)/2;
    if(a[mid] == b) return mid;

    if(a[mid] > b)  binSearch(a,low,mid-1,b);

    if(a[mid] < b)  binSearch(a,mid+1,high,b);
}

int main()
{   int a[] = {2,6,8,88888,88888888}; int yy;
    yy = binSearch(a,0,4,8);
    printf("%d",yy);
    return 0;
}
时间: 2024-11-05 19:32:08

(经典) K&R的名著<<C程序设计语言>>二分查找的相关文章

C语言二分查找

#include <stdio.h> /* 二分查找条件: 1.有序序列 2.数据在数组中 */ int baseBinarySearch(int a[],int h,int k) { int low=0; int high=h; int mid =0; int NoFound = -1; while (low <= high) { mid = low + (high-low) /2 ; if ( k < a[mid] ) { high = mid - 1; } else if (

C语言二分查找与冒泡排序

今天数据结构上机课,老师给了我们几个上个学期做过的C语言题,我惊讶的发现,之前会的算法,时间久了就忘记了,很尴尬,这也充分说明了 我C语言学习功底不够扎实.所以,在课后,我认认真真重新推了一遍,希望下次不会忘记了. 1 #include<stdio.h> 2 main() 3 { 4 int a[]={2,4,6,8,10,12,14,16,18,20}; 5 int left,right,mid,b;//定义变量 6 printf("请输入b的值:"); 7 scanf(

扩展《C程序设计语言》练习2-3程序通用性

最近开始自学C语言,在看K&R的<C程序设计语言>.练习2-3要求写一个函数,将输入的十六进制数字字符串转换成与之等价的整数值,配套答案没有扩展程序的通用性,所以我就稍微改造改造. 配套的答案是这样的(自己添加了注释): 1 #define YES 1 2 #define NO 0 3 4 /* htoi:将十六进制数字字符串转换成十进制数 5 * 如果发现'0x'或'0X'则跳过并设置十六进制数的起点 6 * 检查后续字符是否是0-9,a-f或是A-F 7 * 如果是则将其转换为整形

重读《C程序设计语言》(1):序言

之前已经读过一遍K&R的<C程序设计语言>了,但是并没有写读书笔记.这次想再认认真真地读一遍被誉为C语言圣经的<C程序设计语言>.正如书中所说,C语言并不是一种大型语言,也不需要一本很厚的书来描述.所以这次读书笔记也希望采用简洁的方式来记录C语言中的重要知识点. (1)C语言最早是由Deninis Ritchie于1973年设计并实现的. (2)C语言是在UNIX系统上开发的,并且无论是UNIX系统本身还是运行在其上的大部分程序,都是用C语言编写的. (3)由于C语言适合用

程序设计语言基本概念语 与经典真题

一.基本概念 在计算机中,程序设计语言可划分为低级语言和高级语言两大类,与高级语言相比,用低级语言开发的程序,其运行效率高,但开发效率低.与程序设计相关的基本概念如下. (1)低级语言:又称面向机器语言,它是特定的计算机系统所固有的语言. (2)汇编语言:是机器语言的一种提升,它使用了一些助记符来表示机器指令中的操作码和操作数.但它仍然是一种和计算机机器语言十分接近的语言,使用起来仍然不太方便. (3)高级语言:与人们的自然语言比较接近,使用起来很方便,也极大的提高了程序设计效率. (4)编译程

《C专家编程》笔记(一)——C语言的历史、K&amp;R C和ANSI C

1. C语言的许多特性是为了方便编译器设计者而建立的.于是C语言的语言特性有:数组下标从0而非1开始:C语言的基本数据类型直接与底层硬件相对应:auto关键字只对创建符号表入口的编译器设计者有意义:表达式中的数组名可以看作是指针:float被自动扩展为double(ANSI C中不再如此):不允许嵌套函数(简化了编译器):register关键字,为编译器设计者提供线索,却把包袱丢给了程序员. 2. C编译器不曾实现的一些功能必须通过其他途径实现(编译器实现的功能,如加减乘除.指针.取地址).在C

C语言K&R习题系列——句子中一个空格代替多个空格的四种方法

原题: Write a program to copy its input to its output, replacing each string of one or more blanks by a single blank. 第一种: 这种最常用,设置一个inspace作为布尔变量,标志当前输入是否在字符中,或在字符外 #include <stdio.h>   int main(void) {   int c;   int inspace=0;     while((c = getcha

C语言K&R习题系列——统计文档中每个单词所占字母个数,以直方图形式输出

原题: Write a program to print a histogram of the lengths of words in its input. It is easy to draw the histogram with the bars horizontal; a vertical orientation is more challenging. 这也是我第一个过百行的代码(带注释,空格什么的) 主要分两个部分:输入和输出 #include < stdio.h > #define

C语言K&R习题系列——统计一段文字中各个字母出现的频率

原题: /*Write a program to print a histogram of the frequencies of *difficent characters in it inputs */ 这个和上一个类似 输入部分 #include < stdio.h >    #define NUM_CHARS 256    main ( void )  { int c; int done = 0; int thisIdx = 0; long frequrr[NUM_CHARS + 1];