2008年4月8日 星期二

[C] qsort - compare function

    好弱  摸很久還不是很懂  囧  最後 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);
            }


沒有留言:

張貼留言