輸入輸出 排序演算法

2021-10-09 12:54:19 字數 1396 閱讀 5024

常用函式:

c/c++中有乙個快速排序的標準庫函式 qsort ,在stdlib.h 中宣告,其原型為:

void qsort(void *base, int nelem, unsigned int width, int ( * pfcompare)( const void *, const void *));

使用該函式,可以對任何型別的一維陣列排序。該函式引數中,base 是待排序陣列的起始位址,nelem 是待排序陣列的元素個數,width 是待排序陣列的每個元素的大小(以位元組為單位),最後乙個引數 pfcompare 是乙個函式指標,它指向乙個「比較函式」。排序就是乙個不斷比較並交換位置的過程。qsort 如何在連元素的型別是什麼都不知道的情況下,比較兩個元素並判斷哪個應該在前呢?答案是,qsort 函式在執行期間,會通過pfcompare指標呼叫乙個 「比較函式」,用以判斷兩個元素哪個更應該排在前面。這個「比較函式」不是c/c++的庫函式,而是由使用qsort 的程式設計師編寫的。在呼叫qsort 時, 將「比較函式」的名字作為實參傳遞給pfcompare。程式設計師當然清楚該按什麼規則決定哪個元素應該在前,哪個元素應該在後,這個規則就體現在「比較函式」中。

qsort 函式的用法規定,「比較函式」的原型應是:int 函式名(const void * elem1, const void * elem2);該函式的兩個引數,elem1 和elem2,指向待比較的兩個元素。也就是說, * elem1 和* elem2 就是待比較的兩個元素。該函式必須具有以下行為:

1) 如果 * elem1 應該排在 * elem2 前面,則函式返回值是負整數(任何負整數都行)。

2) 如果 * elem1 和* elem2 哪個排在前面都行,那麼函式返回0

3) 如果 * elem1 應該排在 * elem2 後面,則函式返回值是正整數(任何正整數都行)。

#include #include #include using namespace std ;

const int max_num = 1000;

int a[max_num] ;

int mycompare(const void *e1,const void *e2)

int main()

ofstream destfile("out.txt",ios::out);

if(!destfile)

int x;

while(srcfile >> x)

qsort(a,total,sizeof(int),mycompare);

for(int i = 0 ; i < total;++i)

destfile << a[i] << " ";

destfile.close();

srcfile.close();

return 0 ;

}

常用技巧 輸入輸出優化 輸入輸出外掛程式

我們知道cin cout是比較慢的,不過它們可以加速。在 中加入這兩句即可 std ios sync with stdio false std cin.tie 0 加速過後cin的速度與scanf的速度近似 當然,加速過後就不要混用print和cout,scanf和cin了。因為不同步,後果會很嚴重...

uva oj java輸入輸出

真難的題目 狗屁演演算法 測資很機車 測驗結果 x.xx0 ms 測驗日期 200y mm dd author raymond wu 小璋丸 publicclassmain 載入單字的字元 while bytedata 1 else bytedata system.in.read catch exc...

檔案輸入 輸出

13.1 和檔案進行通訊 文字檢視和二進位制檢視 在文字檢視中,程式看到的內容和二進位制的內容可能不同,例如ms dos文字檔案用回車符和換行符的組合 r n來表示行尾,macintosh用乙個回車符 r來表示行尾。c程式使用乙個 n表示行尾。所以,如果c程式以文字檢視模式處理乙個ms dos文字檔...