### 問題描述 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數列
- 程序算法藝術與實踐:遞歸策略基本的思想
- 程序算法藝術與實踐:經典排序算法之插入排序
- 程序算法藝術與實踐:遞歸策略之遞歸,循環與迭代