[C] 論qsort的cmp function

note: 先#include
note2:條件運算子
          運算式?x:y
          若運算式為真 答案為x 否則為y
note3:cmp的return值,for example:由小排到大
         if(a!=b)
             return *(int*)a>*(int*)b?1:-1; //a>b 回傳1,a<b回傳-1
         else
             return 0;//a=b回傳0
     
這樣說好了,如果我回傳1表示a>b,則順序要變ba
回傳-1表示a<b,順序ab不變
也就是說 回傳1就是順序顛倒,回傳-1就是順序不變

1.for int

qsort(data,n,sizeof(int),cmp);
cmp(const void *a,const void *b){
return *(int*)a - *(int*)b;
}

2.for char

qsort(data,n,sizeof(char),cmp);
cmp(const void *a,const void *b){
return *(char*)a - *(char*)b;
}

3.for double

qsort(data,n,sizeof(double),cmp);
cmp(const void *a,const void *b){
return *(double*)a > *(double*)b?1:-1;
}

4.for struct (參考UVa 11321)
//以sort值做排序

typedef struct sample{
double data,
int sort;
}Sample;
Sample sample[n];
qsort(sample,n,sizeof(sample[0]),cmp);
cmp(const void *a,const void *b){
return *(Sample*)a.sort > *(Sample*)b.sort ?1:-1;
}

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s