《编程珠玑》代码之路1:学习位操作的神器----位图排序(附解决程序员心理问题的门路)

本文结合《编程珠玑》一书,分享使用位图排序算法解决数字排序问题的代码实现,保证O(N)时间复杂度和1MB内存限制。同时,探讨编程中的心理障碍,强调心态和思维在解决问题中的重要性,鼓励程序员关注软技能提升,如心理学、文学和哲学等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近由于“闲书”读太多,不少朋友以为我要转当产品经理了,故想起来把最近读的《编程珠玑》以及自己编写的代码整理成博客,用代码证明自己的清白。虽然自己比较菜不能和Google和ACM金牌大佬PK技术,作为一只老年菜鸡ACMer,经常一顿操作猛如虎,一看战绩0AC。

但相信对于刚入门的小伙伴来说,我的代码也许能帮上忙哈哈,同时作为一只纯种家养菜鸡却经常被各路大佬轮番吊打的我,也会结合《编程珠玑》提到的心理障碍简单谈一谈自己的看法。

当你被诬陷要转行的时候,跳进黄河也洗不清,但用代码可以。 ----- 某大厂资(meng)深(xin)算法工程师(其实就是我)。 

好啦言归正传(突然一脸严肃的丢出问题):

给一个数字N(0 <= N <= 10000000),以及最多N个不重复数字X(1 <= X <= N),将他们排序并输出。

要求时间复杂度O(N),Memory Limited:1MB。

这是一张图

好啦,你都搜博客了,说明你需要代码(解析在代码中):

#include <iostream>
#include <cstdlib>

using namespace std;

const int SIZEINT = 32;
const int MASK = 0x1f;
const int MAXINT = 10000000;
const int SHIFT = 5;

int numArray[MAXINT + 10];//要排序的数字
int sortArray[MAXINT / SIZEINT + 10];//排序后的数组

int setBit(int array[], int num, int nSize);//设
第一部分 编 程 技 术 第1章 性能监视工具 3 1.1 计算素数 3 1.2 使用性能监视工具 7 1.3 一个专用的性能监视工具 8 1.4 开发性能监视工具 10 1.5 原理 11 1.6 习题 11 1.7 深入阅读 12 第2章 关联数组 13 2.1 Awk中的关联数组 13 2.2 有穷状态机模拟器 16 2.3 拓扑排序 17 2.4 原理 20 2.5 习题 21 2.6 深入阅读 22 第3章 程序员的忏悔 23 3.1 二分搜索 24 3.2 选择算法 26 3.3 子程序库 28 3.4 原理 30 3.5 习题 31 第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 5.6 深入阅读 49 5.7 调试(边栏) 49 第6章 计算机科学箴言集 51 6.1 编码 52 6.2 用户界面 53 6.3 调试 53 6.4 性能 54 6.5 文档 56 6.6 软件管理 56 6.7 其他 58 6.8 原理 58 6.9 习题 58 6.10 深入阅读 60 第7章 粗略估算 61 7.1 头脑热身 61 7.2 性能的经验法则 62 7.3 Little定律 64 7.4 原理 65 7.5 习题 66 7.6 深入阅读 67 7.7 日常速算(边栏) 67 第8章 人员备忘录 69 8.1 备忘录 69 8.2 原理 71 8.3 深入阅读 71 第三部分 人性化I/O 第9章 小语言 75 9.1 Pic语言 76 9.2 视角 79 9.3 Pic预处理器 81 9.4 用来实现Pic的小语言 83 9.5 原理 87 9.6 习题 88 9.7 深入阅读 89 第10章 文档设计 91 10.1 表格 92 10.2 三条设计原则 94 10.3 插图 94 10.4 文本 96 10.5 合适的媒介 98 10.6 原理 100 10.7 习题 101 10.8 深入阅读 101 10.9 次要问题目录(边栏) 10111章 图形化输出 103 11.1 实例研究 103 11.2 显示结果取样 105 11.3 原理 107 11.4 习题 108 11.5 深入阅读 110 11.6 拿破仑远征莫斯科(边栏) 110 第12章 对调查的研究 113 12.1 有关民意调查的问题 113 12.2 语言 114 12.3 图片 117 12.4 原理 119 12.5 习题 120 第四部分 算 法 第13章 绝妙的取样 123 13.1 取样算法一瞥 123 13.2 Floyd算法 124 13.3 随机排列 125 13.4 原理 127 13.5 习题 127 13.6 深入阅读 128 第14章 编写数值计算程序 129 14.1 问题 129 14.2 牛顿迭代 130 14.3 良好的起点 132 14.4 代码 133 14.5 原理 135 14.6 习题 135 14.7 深入阅读 137 14.8 数值算法的力量(边栏) 137 第15章 选择 141 15.1 问题 141 15.2 程序 142 15.3 运行时间分析 145 15.4 原理 148 15.5 习题 149 15.6 深入阅读 151 录A C和Awk语言 153 录B 一个子程序库 157 部分习题答案 165 索引 181
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值