`

【编程珠玑】第四章 编写正确的程序

 
阅读更多

1、对下标限定界限:加条件 0<=l u<=n-1

2、这个函数可以写成如下形式:

#include <iostream>
using namespace std;

int bs(int *a, int begin, int end, int v)  
{  
    int *b = a + begin; //开始 
	int *e = a + end;   //结束 
	int *mid = NULL;    //中间 
     
  
    while (b < e)  //直到等于第一个出现的值 
    {  
        mid = b + ((e - b)>>1);  //得到中间位置的地址 
        
        if (*mid >= v) 
			e = mid;  
        else 
			b = mid + 1;  
    }  
    if ((e-a) < end && (*e == v)) 
		return e-a;  
		
    return -1;  
}  
int main()
{
	int a[5]={1,2,2,2,4};
	cout<<bs(a, 0, 4, 2)<<endl;
	return 0;
}

再给一段测试代码

#include <stdio.h>  
#include <stdlib.h>  
int cmp(const void *a, const void *b)    
{    
    return (*(int*)a) - (*(int*)b);    
}  
  
int bs(int *a, int begin, int end, int v)  
{  
    int *b = a + begin, *e = a + end, *mid = NULL;  
    if (!a) return NULL;  
  
    while (b < e)  
    {  
        mid = b + ((e - b)>>1);  
        if (*mid >= v) e = mid;  
        else if(*mid < v) b = mid + 1;  
    }  
    if ((e-a) < end && (*e == v)) return e-a;  
    return -1;  
}  
  
int find(int *a, int begin, int end, int v)  
{  
    int i = 0;  
    for (i = begin; i < end; ++i)  
        if (a[i] == v) return i;  
    return -1;  
}  
  
int main(void)  
{  
    int a[10000];  
    int n = 10000, i = 0;  
    int f, e;  
    for (i = 0; i < n; ++i)  
        a[i] = random()%100;  
    qsort(a, n, sizeof(int), cmp);  
    for (i = 0; i < n; ++i){  
        f = find(a, 0, n, a[i]);  
        e = bs(a, 0, n, a[i]);  
        if (f != e)  
            printf("Error find of %d %d %d\n", a[i], f, e);  
    }  
    return 0;  
}  

6、程序终止性证明:即每一步都至少会扔出一个豆子,所以总会结束的。此外,白色的豆子要么拿两个,要么不扔,所以白色的豆子如果是奇数,则会留下一个白豆子,否则是黑豆子。

7、题目里面如果要采用二分搜索,那么需要找的是一个数的刚好下界。

采用题目2中的方法,可以找到刚好上界,由于,线段是顺序排列的,所以就可以找刚好的下界了。

分享到:
评论

相关推荐

    编程珠玑 第2版(修订版)_编程珠玑修订_资料_

    《编程珠玑 第2版(修订版)》是一本深受程序员喜爱的经典著作,它不仅提供了丰富的编程实践经验,还深入探讨了程序设计的艺术与智慧。这本书的修订版更是在原版基础上进行了更新和完善,旨在帮助程序员提升编程技能,...

    编程珠玑.pdf

    第4章 自描述数据 33 4.1 名字—值对 33 4.2 记录来历 36 4.3 排序实验 37 4.4 原理 39 4.5 习题 39 第二部分 实 用 技 巧 第5章 劈开戈尔迪之结 43 5.1 小测验 43 5.2 解答 44 5.3 提示 44 5.4 原理 47 5.5 习题 48...

    编程珠玑 Programming Pearls 第二版(中文版+源代码)

    4. **编程语言选择**:虽然标签提到“C/C++”,但《编程珠玑》并不局限于特定语言,而是通过通用的编程概念来讲述问题,这些概念可以应用于任何编程语言。书中的例子多数用C语言编写,但其思想对于理解和改进任何...

    编程珠玑(第二版)答案

    根据提供的标题“编程珠玑(第二版)答案”和描述“编程珠玑(第二版)答案”,我们可以推测出这是关于《编程珠玑》这本书的相关解答资料。《编程珠玑》是一本经典的计算机科学书籍,作者为Jon Bentley。本书旨在...

    《编程珠玑》第2版中文PDF+源代码

    《编程珠玑》是计算机科学领域的一本经典著作,作者是Jon Bentley,他在书中通过一系列有趣的问题和解决方案,深入浅出地探讨了程序设计的艺术和技巧。这本书的第二版中文PDF和源代码的提供,为中国的程序员和计算机...

    编程珠玑第2版(中文pdf版)

    数据结构是程序设计的核心组成部分之一,《编程珠玑》第二版中也对此做了详尽的讲解。书中介绍了数组、链表、树、图等常见数据结构,并且深入分析了它们各自的优缺点以及适用场景。此外,还讨论了如何选择合适的数据...

    编程珠玑 第二版 修订版

    第4章 编写正确的程序 33 4.1 二分搜索的挑战 33 4.2 编写程序 34 4.3 理解程序 36 4.4 原理 38 4.5 程序验证的角色 39 4.6 习题 40 4.7 深入阅读 42 第5章 编程小事 43 5.1 从伪代码到C程序 43 5.2 测试...

    编程珠玑第二版英文版 带源码

    《编程珠玑第二版英文版》是一本深受程序员喜爱的经典著作,由Jon Bentley 所著。这本书以其深入浅出的方式探讨了程序设计的艺术,通过一系列精心挑选的问题和解决方案,揭示了编程中的智慧与技巧。书中的每个章节都...

    编程珠玑pdf

    《编程珠玑》第二版,由Jon Bentley撰写,是一本被众多顶级大师推荐的经典之作,深入探讨了软件工程中令人着迷的一面——编程技巧与创新思维。本书不仅为学生提供了宝贵的指导,也对经验丰富的程序员有着重要的启示...

    《编程珠玑》第二版中文版(含英文版&&源码)

    通过阅读《编程珠玑》第二版,无论是初学者还是经验丰富的程序员,都能从中受益匪浅。英文版可以让你直接接触作者的原始思想,中文版则让理解更为便捷。同时,源码分析部分可以让你更直观地看到理论在实际代码中的...

    编程珠玑 中英文 第2版(含源代码)

    3. **程序性能优化**:《编程珠玑》强调了效率的重要性,书中会介绍如何通过优化算法和改进数据结构来提高程序的运行速度和内存使用效率。这对于处理大规模数据或性能敏感的应用尤其重要。 4. **编程艺术**:除了...

    《编程珠玑》(Programming Pearls)课本和习题代码实现

    1. **column4.cpp**: 第四章可能关注的是排序和搜索问题。在编程珠玑中,Bentley讨论了如何有效地进行二分查找,并提出了在大型数据集上优化搜索的方法,如跳跃查找(Skip List)或位向量(Bit Vector)技术。 2. *...

    编程珠玑第二版

    《编程珠玑第二版》是计算机科学领域里一本广受赞誉的经典著作,它以其深入浅出的方式探讨了程序设计中的诸多重要问题。这本书的核心理念是通过解决实际编程问题来提升读者的编程技巧和思维能力,使得程序员能更好地...

    编程珠玑(Programming Pearls) 第二版-- (大礼包)PDF 中文版+英文版+源码

    《编程珠玑(Programming Pearls)》是计算机科学领域中一本经典的著作,由Jon Bentley编著,第二版进一步丰富和完善了第一版的内容。这本书被誉为程序员的智慧结晶,它不仅仅是一本关于编程技巧的书,更是一本探讨...

    编程珠玑(第二版)中文版

    ### 编程珠玑(第二版)中文版 #### 知识点概览与解析 《编程珠玑》是计算机科学领域中一部经典的著作,由著名计算机科学家Jon Bentley撰写。本书自出版以来就受到了广大程序员和技术爱好者的热烈欢迎。第二版在...

    编程珠玑源代码

    算法,第3章 数据决定程序结构,第4章 编写正确的程序,第5章 编程小事,第6章 程序性能分析,第7章 粗略估算,第8章 算法设计技术,第9章 代码调优,第10章 节省空间,第11章 排序,第12章 取样问题,第...

    编程珠玑第二版.

    《编程珠玑第二版》是程序设计领域里一本极具影响力的著作。这本书以其深入浅出的讲解和富有洞见的分析,深受程序员和计算机科学爱好者的喜爱。书中涵盖了许多编程实践中的核心问题,如数据结构、算法优化、问题解决...

    编程珠玑第二版中英文打包

    《编程珠玑第二版》是计算机科学领域里一本经典的书籍,由Jon Bentley撰写,它以其深入浅出的方式探讨了程序设计的问题和解决方案,尤其在数据结构、算法优化以及问题解决策略方面有着独到的见解。这本书深受程序员...

Global site tag (gtag.js) - Google Analytics