程式設計珠璣筆記第一章 a i SHIFT

2022-08-05 11:06:16 字數 1856 閱讀 6030

問題描述:

問題:一個最多包含n個正整數的檔案,每個數都小於n,n = 100 00000。檔案中的正整數沒有重複的,請按升序排列這些整數。可用記憶體空間只有1mb左右,執行時間在10秒左右。

選擇方案:

1:歸併排序,32為整數,1m的記憶體空間,每次可以讀入約250 000(25萬)個數(注意估計方法,1m 10的6次方,1百萬位元組,1g,10的9次方,10億位元組)

那就需要40次讀入,第一次遍歷檔案,對0-249 999的樹進行排序,第二次對250 000到499 999之間的數排序,瓶頸在於需要40次讀入檔案

2:利用點陣圖和位向量解決,該排序的特徵為:資料沒有重複,資料限制在較小的範圍內,除了單一整數外沒有其他的相關資料了

習題:庫語言實現排序

產生10 000 000檔案

#include #include using namespace std;

#define rand_max 10000

//rand 產生2^15次方的隨機數,bigrand產生2^30次方的隨機數,見程式設計珠璣12章如果用rand做產生的資料隨機性不太好,所以用bigrand

int bigrand()

int randint(int l,int u)

#define sourcenum 10000000

int testdata[sourcenum];//這麼大的陣列不能在main內定義,因為棧的大小有限制,定義為全域性變數,在靜態區

int main()

void clr_i(int i)

int main()

file *fpin = fopen("d:\\file2.txt","r");

file *fpout = fopen("d:\\fpout.txt","w+");

int m = 0;

for (int i = 1; i <= n;i++)

#define n 10000000

int testdata[n];

int main()

} //void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));   

qsort(testdata,10000000,sizeof(int),intcomp);

for (int i = 1; i <= n;i++)

fclose(fpin);

fclose(fpout);

endtime = clock();

cout<<(double)(endtime - begintime)/clocks_per_secfor (int i = 1; i <=n;i++) }

set::iterator siterator;

for (siterator = s.begin();siterator!=s.end();++siterator)

fclose(fpin);

fclose(fpout);

endtime = clock();

cout<<(double)(endtime - begintime)/clocks_per_sec<

tkinter第一章

tk1 import tkinter as tk tk2import tkinter as tk 按鈕類,內容為text fg 前景色 co...

第一章 前序

寫此文章的目的,在於對自己這段時間以來,對openstack學習的一個總結 目前還是菜鳥 在此過程中當然碰到了很多的問題,而這些問題想必也是...

第一章 穿越

宋海,是個標準的宅男,基本上除了上班就是宅在家裡,不過他有自己的愛好,程式設計。他宅在家裡不像其他人男孩那樣打遊戲,而是看程式設計的書,偶爾...