//testqs2.c -- test qsort2( ) -- by tsaiwn@cs.nctu.edu.tw // to test the function qsort2( ), 它在 qsort2.c 內 // 使用該 qsort2( ) 來幫忙 sort 一個無聊的整數 array :-) // qsort2( ) 是我寫的 quick sort, 除了函數名稱是 qsort2( ), // 它與 C Library 的 qsort( ) 功能和用法完全相同, // ==> 但是實際測試結果比 C Library 的 qsort 大約快 10% // 請注意在上週以前給大家的例子都是只有一個檔案(file), // 這例子以及隨著 Lab13 給大家的許多例子都要用到多個檔案 // (本範例共要三個檔案: 這個 testqs2.c, 和 qsort2.c, qsort2.h) #include #include "qsort2.h" //這裡我故意 #include "qsort2.h" // 其實在 qsort2.h 內就是以下關於 qsort2( ) 的宣告而已! // .. 也就是說若我們宣告以下 void qsort2( ) 就不用那 #include 了 // 但是, 如果你是寫 qsort2.c 的人, 你要念以下這宣告給我會嫌麻煩, // 所以你會把以下宣告寫在 qsort2.h 內, 叫我自己 #include 就好 ! // void qsort2(void*x, int n, int size, // int (*cmp)(const void*, const void*) ); // int y[ ] = { 55, 66, 23, 38, 55, 69, 58, 49, 88, 20, 77 }; const int NY = (sizeof y / sizeof y[0]); void print(int*x, int n) { int i; for(i=0; i gcc -c qsort2.c D:\test> gcc testqs2.c qsort2.o D:\test> a.exe Original data: 55 66 23 38 55 69 58 49 88 20 77 After sort... 20 23 38 49 55 55 58 66 69 77 88 AGAIN, sort it with cmp22: 88 77 69 66 58 55 55 49 38 23 20 Hit ENTER key... D:\test> type qsort2.h //qsort2.h -- another version of quick sort, as qsort( ) in C Library // @CopyLeft by tsaiwn@csie.nctu.edu.tw #ifndef _QSORT2_H_ #define _QSORT2_H_ void qsort2(void*x, int n, int size, int (*cmp)(const void*, const void*) ); #endif D:\test> *** 請注意在 qsort2.h 的三個條件編譯句子 #ifndef, #define, #endif 這很重要(雖然在這檔案不重要, 因為這 file 只有宣告, 沒任何定義 !) 如果 Header file 中有 "定義" (例如定義 struct Student), 那一定要像這樣保護起來! 這樣使得這 file 即使不小心被 #include 很多次也不會怎樣! 還有, 習慣上保護用的 SYMBOL 取個與檔案名稱很接近的! 例如該 Header file 是 qsort2.h, 所以取 _QSORT2_H_ 大家都該遵守習慣用法, 這樣才不會不同檔案名稱卻用到相同"SYMBOL" ! ********************/