【编程珠玑】排序与位向量

最后更新于:2022-04-01 21:40:08

### 问题描述 1:  **如果不缺内存,如何使用一个具有库的语言来实现一种排序算法以表示和排序集合?**(来源于**《编程珠玑》第2版**第1章中第7页习题1) ### 分析: 我们应该对题目进行分析: 1)对内存并没有什么要求;2)选择库的语言来实现;3)排序算法。若我们需要访问的是一个长度(假设n为1000000)非常大的数组,一般而言对数组中某个元素访问前我们必须要进行初始化,但是当n值非常大而程序对times要求并没有什么要求,实际中,对开发的程序的time比较严格时,对所有的数组元素都进行统一的初始化是不可取的。为了达到程序对time的要求,我们应该对需要访问的元素(它的个数相对于n来说很小)进行初始化。 ### 标准库涵数QSORT排序 ~~~ static int incomp( int * x, int *); int a [1000000]; int main (void) { int i , n =0; while( scanf("%d", &a[n] !=EOF); n++; qsort( a, n,sizeof(int), incomp); for( i =0; i::interator j; while( cin >>i) S.insert(i); for( j = S.begin() ; j != S.end(); j++) cout <<*j << "\n" ; return 0; } ~~~ ### 问题描述 2:  **如何使用位逻辑运算(例如与、或、移位)来实现位向量?**(来源于**《编程珠玑》第2版**第1章中第7页习题2) ### 分析 重要的概念:用一个n位长的字符串来表示一个所有元素都小于n的简单非负整数集合。相对一般的数据而言,其特点是:1)数据限制在一个范围里;2)数据没有重复; 3)数据没有其他的关联项 ### 代码 ~~~ int n = 100; byte[] array = new byte[n];//可以储存[0,n*8)的数 //用int m举例,假设m在范围内 int m,index,step;//index确定byte数组的索引位置,step确定byte[index]里的bit位 index = m/8; step = m%8; byte temp = 1; temp = temp< ';