`
Tonyguxu
  • 浏览: 279581 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【编程珠矶】开篇 千万号码的排序问题

 
阅读更多

注:学习了《编程珠矶》第一章,将涉及的一些知识点整理如下

 

value-->index 将某个数转化为位图的索引,如要表示value=2,即将位图index=2上的value赋为1(00100000.。。)

 

位图数据结构

~位反

<< 位左移

>> 位右移

& 位与 : 同为1(真)为1

| 位或 :只要有一个为1(真)则为1

^ 位异或 :1 和 0为1

 

0,1 | 1 = 1,1    ==> 或1,都成1

0,1 | 0 = 0,1

0,1 & 1 = 0,1

0,1 & 0 = 0,0  ==> 与0,都成0

0,1 ^ 1 = 1,0  ==> 异或1,变反

0,1 ^ 0 = 0,1

掩码
掩码在计算机学科及数字逻辑中指的是一串二进制数字,通过与目标数字的按位操作,达到屏蔽指定位而实现需求。
示例:创造一个掩码msk把一个指令cmd的第0~3位(右边第一位为0位)清零:

指令 cmd = 0110011011
创造掩码 msk = 0000001111

用掩码的反码~msk和指令cmd做按位与运算 cmd & ~msk = 0110011011 & 1111110000 = 0110010000则指定的第0~3位已被清零。

 

    #define BITS_PER_BYTE 8  
    #define BITS_PER_INT (BITS_PER_BYTE * 4)  
    // set the bit of the int specified by index to 1.  
    // the index is zero-based, counting from the left(the higher end)  
    inline void pearl_int_set(int* data, int index)  
    {  
        int mask = 1 << (BITS_PER_INT - 1 - index);  
        *data |= mask;  
    }  
      
    // test whether a bit of the int specified by index is 1.  
    // the index is zero-based, counting from the left(the higher end)  
    inline int pearl_int_test(int* data, int index)  
    {  
        int mask = 1 << (BITS_PER_INT - 1 - index);  
        return (*data) & mask;  
    }  
      
    // set a bit of the int specified by bit_index to 0.  
    // the index is zero-based, counting from the left(the higher end)  
    inline void pearl_int_clear(int *data, int bit_index)  
    {  
        int mask = ~(1 << (BITS_PER_INT - 1 - bit_index));  
        *data &= mask;  
    }  
      
    // get the right(lower) part of the int.  
    inline int pearl_int_right(int *data, int count)  
    {  
        int mask = 1;  
        while(count > 0) {  
            mask = mask << 1 + 1;  
        }  
        return *data & mask;      
    }  
      
    // get the left(upper) part of the int value  
    inline int pearl_int_left(int *data, int count)  
    {  
        int mask = 1;  
        count = BITS_PER_BYTE - count;  
        while (count > 0) {  
            mask = mask << 1 + 1;  
        }  
      
        mask = ~mask;  
        return *data & mask;  
    }  
      
    // set a bit of the speicified memory area to 1.  
    // @warning this function does NOT perform error checking.  
    inline void pearl_set(int *bitplane, int index)  
    {  
        int offset = index / BITS_PER_INT;  
        int pos = index - offset * BITS_PER_INT;  
      
        pearl_int_set(bitplane + offset, pos);  
    }  
      
    // set a bit of the specified memory area to 0.  
    // @warning this function does NOT perform error checking.  
    inline void pearl_clear(int *bitplane, int index)  
    {  
        int offset = index / BITS_PER_INT;  
        int pos = index - offset * BITS_PER_INT;  
      
        pearl_int_clear(bitplane + offset, pos);  
    }  
      
    // test if a bit of the specified memory area is 1.  
    // @warning this function does NOT perform error checking.  
    inline int pearl_test(int *bitplane, int index)  
    {  
        int offset = index / BITS_PER_INT;  
        int pos = index - offset * BITS_PER_INT;  
      
        return pearl_int_test(bitplane + offset, pos);  
    }  
 

如果待排序数据都在内存中

 

分享到:
评论

相关推荐

    编程珠矶算法

    《编程珠矶算法》系列电子书籍,如同一把钥匙,开启算法知识宝库的大门,使读者能深入探索并掌握各类算法,为编程技能的提升奠定坚实基础。 系列书籍的第一本,开篇即对算法的基础知识进行了全面的介绍。排序与搜索...

    基于问题求解的C语言开篇教学研究.pdf

    综上所述,文章《基于问题求解的C语言开篇教学研究》针对C语言开篇教学中常存在的问题,提出了一套以培养问题求解能力为核心的教学目标体系和教学方法,强调在教学过程中应注重问题的提出、分析、模型建立和编程实现...

    《编程珠玑》读书笔记

    - **思维陷阱**:本章首先提出了一个关于排序的具体问题,但通过这一问题引出了更深层次的概念——在解决问题之前,必须先明确问题本身。很多人往往急于寻找解决方案,而忽略了问题定义的重要性。 - **问题描述**:...

    unix网络编程三卷合一中文版

    在计算机网络编程领域,Unix系统无疑占据着举足轻重的地位。...这套书为程序员打开了一扇通向网络编程世界的大门,让读者能够在实际开发中游刃有余地处理各种网络编程问题,构建出高效、可靠的网络应用程序。

    C#编程自学之开篇介绍

    【C#编程自学之开篇介绍】 C#是一种由微软公司开发的面向对象的编程语言,专门为.NET框架设计。它的诞生吸收了C++和Java的精髓,并结合了VB6的某些特性,使得C#成为了一种高效且易于管理的编程语言。C#的关键优势...

    编程珠玑 第二版 修订版

    第1章 开篇 3 1.1 一次友好的对话 3 1.2 准确的问题描述 4 1.3 程序设计 4 1.4 实现概要 5 1.5 原理 6 1.6 习题 7 1.7 深入阅读 9 第2章 啊哈! 算法 11 2.1 三个问题 11 2.2 无处不在的二分搜索 12 2.3 ...

    C/C++高质量编程指南

    《C/C++高质量编程指南》的开篇“文件结构”部分,便着重于这个方面。作者指出,良好的文件结构不仅有助于单个开发者的项目维护,更能在团队协作中发挥重大作用。例如,源代码文件的命名、存放方式以及头文件与定义...

    Java编程题全集(50题及答案)

    开篇题为“斐波那契数列与兔子繁殖问题”,这个经典的问题不仅考验了对递归和循环的理解,也是对数据结构掌握的初步检验。在编程实现时,我们往往会选择使用数组来存储中间结果,或是利用递归方法来简化问题。无论是...

    施耐德可编程控制器(PLC)PL707WIN编程软件操作手册.pdf

    最后,手册还可能提供了关于软件的常见问题解答、故障排除以及最佳实践的建议,帮助用户快速解决在编程或操作过程中可能遇到的问题,提高工作效率。 由于内容中提供的文本片段存在一些识别错误和不连贯之处,以上...

    unix网络编程 第一卷

    此外,作者还对UNIX标准以及64位架构下的网络编程问题进行了讨论,这不仅是对基础概念的深入,也为读者在未来面对不同架构下的编程挑战时提供了理论基础。 在网络编程的基础概念章节,作者精心梳理了协议独立性、...

    王大刚 C语言编程宝典

    《王大刚 C语言编程宝典》是一本全面而深入的编程教材,由IT领域内知名的作者王大刚所著,旨在为不同层次的读者提供C语言编程的知识和技能。作为一本学习指南,它不仅仅适合编程新手,同时也为经验丰富的程序员提供...

    编程珠玑(第2版·修订版)1

    《编程珠玑(第2版·修订版)》是一本...这本书通过丰富的习题和深入阅读推荐,鼓励读者实践和探索,旨在提升程序员对复杂编程问题的理解和解决能力,无论对于初学者还是经验丰富的开发者,都是极有价值的参考资料。

    【精品教程】游戏编程入门

    文章开篇就强调了选择合适编程语言的重要性。对于初学者而言,C和C++无疑是游戏开发中的主流语言,但其复杂性可能会令新手望而却步。然而,这两种语言之所以被广泛推荐,不仅是因为它们在游戏开发中的重要地位,更是...

    UNIX环境高级编程 pdf高清版

    这些内容将帮助读者在面对编程难题时,能够有效地定位和解决问题。 为了让读者更好地理解和实践所学知识,《UNIX环境高级编程》中附带了大量实例代码。这些代码涉及书中的各个方面,不仅对理论知识进行了有效的补充...

    《编程珠玑》详细笔记

    针对上述问题描述,作者探讨了几种可能的排序方法,如基于磁盘的归并排序和多趟排序等。然而,这些方法在实际应用中面临内存不足的问题。作者最终认为,只有当所有整数都可以在可用的 1 MB 内存中表示时才能实现有效...

    fagor内置PLCI编程手册.pdf

    FAGOR数控系统内置PLCI编程手册是一份关于FAGOR数控系统中内置PLCI(可编程逻辑控制器集成)模块的编程指南。这份手册详细介绍了如何使用PLCI进行编程,包括基础知识、信号处理、程序编辑以及PLCI与数控系统CNC之间的...

    Java并发编程的艺术

    本章不仅详细介绍了这些工具类的功能和用途,还提供了一系列实用的例子,帮助读者理解如何利用这些工具来解决常见的并发编程问题。这些工具类的应用范围广泛,从简单的计数器到复杂的协作模式都有涉及。 #### 九、...

    ATEQ英文232编程文档

    接着,配置ATEQ设备的详细步骤被逐一展开,包括如何设定设备为从属模式、设置RS232通信模式、分配唯一的站号以及选择合适的通信速率和奇偶校验方式,都是确保设备能够与外部系统正确通讯的关键要素。 作为Modbus ...

Global site tag (gtag.js) - Google Analytics