### 问题描述 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<n; i++)
printf("%d\n" , a[i]);
return 0;
}
static int incomp( int * x, int *){
return (*x-*y);
}
~~~
### 标准模板库中的SET容器
~~~
int main (void) {
int i ;
set<int>::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<<step;
array[index] = array[index]||temp;
~~~
**转载请注明出处**:[http://blog.csdn.net/utimes/article/details/8760268](http://blog.csdn.net/utimes/article/details/8760268)
- 前言
- 螺旋矩阵、螺旋队列算法
- 程序算法艺术与实践:稀尔排序、冒泡排序和快速排序
- Josephu 问题:数组实现和链表实现
- 杨辉三角形算法
- 位图排序
- 堆排序的实现
- Juggling算法
- 【编程珠玑】排序与位向量
- 取样问题
- 变位词实现
- 随机顺序的随机整数
- 插入排序
- 二分搜索
- 产生不重复的随机数
- 约瑟夫环解法
- 快速排序
- 旋转交换或向量旋转
- 块变换(字符反转)
- 如何优化程序打印出小于100000的素数
- 基本的排序算法原理与实现
- 利用马尔可夫链生成随机文本
- 字典树,后缀树
- B-和B+树
- 程序算法艺术与实践引导
- 程序算法艺术与实践:基础知识之有关算法的基本概念
- 程序算法艺术与实践:经典排序算法之桶排序
- 程序算法艺术与实践:基础知识之函数的渐近的界
- 程序算法艺术与实践:递归策略之矩阵乘法问题
- 程序算法艺术与实践:递归策略之Fibonacci数列
- 程序算法艺术与实践:递归策略基本的思想
- 程序算法艺术与实践:经典排序算法之插入排序
- 程序算法艺术与实践:递归策略之递归,循环与迭代