這個題目有乙個前提條件,大檔案的中的資料有有乙個特點,那就是不存在重複的資料。就算是重複的資料,也只讓你求出去除重複之後的那些資料的排序結果。
如果題目變成了這樣,我們就可以考慮建立乙個大的陣列。陣列的下表表示乙個整數,陣列的內容在我遍歷檔案的時候再賦值。如果陣列下標代表的那個整數存在,我們就把陣列的這個元素賦值為1,否則賦值為0.這樣我們就可以再次遍歷陣列,把元素的值為1的那些下標輸出到另乙個檔案,這樣另乙個檔案中就存放了排好序的資料了。
上面的那個陣列,其實我們可以用vector,或者bitset;來實現,這就是所謂的點陣圖演算法,實現如下:
//對10^7個整數的檔案進行排序,整數無重複,將排序的結果寫到sorted_data.txt檔案中。
//用位圖的方法。
void sort_big_file_with_single_data()
fout.close();
//從檔案中讀取前100個資料並顯示
ifstream fin;
fin.open("data.txt",ios::binary);
for (int i=0,num=0;i<100;i++)
cout
bit.reset();
//ifstream fin;
fin.open("data.txt",ios::binary);
int i=0;
while (true)
bit[i]=true;
} fin.close();
//將排序的檔案輸出到sorted_data.txt
//ofstream fout;
fout.open("sorted_data.txt",ios::binary);
for (int i=0;i(&i),sizeof(int));
} }fout.close();
cout<
if (fin.eof())
cout<
上面對5百萬個整數的檔案進行排序,將結果輸出到另外乙個檔案中,並顯示輸出檔案的一部分作為測試結果。
騰訊的乙個筆試題
觀察下面一段 class classa virtual void functiona class classb class classc public classa,public classb classcaobject classa pa aobject classb pb aobject cla...
筆試題 反轉乙個位元組
這道題很古老了,可別將它和大端轉小端混淆了,所謂大端和小端指的是位元組序,而這裡反轉乙個位元組說的是位序,演算法更是不勝列舉,說實話都能達到目的,剩餘的就是看看誰的效率更高了,基本上這是乙個最難的問題,高手不是能寫出最美麗的程式而是能寫出既美麗同時效率又是最高的程式,如果乙個人寫的程式很美麗,很直觀...
python 之 類(乙個類包含乙個類)
1.知識點 1 乙個類可以作為另乙個類的元素。2 當乙個類的屬性為列表新增另乙個類名時,會預設新增另乙個類的 str self 的返回值 箱子 class box 屬性 def init self,b color,b volumn self.color b color self.volumn b v...