好弱 摸很久還不是很懂 囧 最後 google 紀錄一下
突然想起第一次監考時 有學弟還問我怎樣 call qsort
大學還真的沒用過 倒是寫了幾次 qsort
資料來源 http://mail.lssh.tp.edu.tw/~hlf/class-1/lang-c/qsort.htm
void qsort( void* base, size_t n, size_t size, int (*cmp)(const void*, const void*) )
陣列基礎的快速排序法函數,陣列是參數 base,n 是陣列大小,size 是每個
元素的大小,最後的參數是指向函數的指標,這是比較元素大小的函數( 即上面
compare() 函數)。
其實最重要的是 compare 該怎樣寫, 以 sorting 一個 int array[Num] 來說
呼叫
qsort( (void*) array , Num , sizeof( int ) , compareInt );
定義
int compareInt(const void *a, const void *b)
{
int c = *(int *)a;
int d = *(int *)b;
if(c < d) //傳回 -1 代表 a < b
return -1;
else if (c == d) //傳回 0 代表 a = b
return 0;
return 1; //傳回 1 代表 a>b
}
上面寫得很淺顯易懂 程式碼的重點擺在 readability
接著就是對一個 char * array[Num] 來說
這是我常常一時之間摸不透的東西 Orz
呼叫
qsort( (void*) array , Num , sizeof( char* ) , compareString );
定義
int compareString(const void *a, const void *b)
{
return strcmp(*(char **)a, *(char **)b);
}
沒有留言:
張貼留言