1 int compconst void p const void q

  • Slides: 9
Download presentation

一些飯粒範例 1. int comp(const void *p, const void *q){ int A = *(int *)p;

一些飯粒範例 1. int comp(const void *p, const void *q){ int A = *(int *)p; // 把p指向的位置的值解析出來 int B = *(int *)q; // 把q指向的位置的值解析出來 if ( A == B ) return 0; return (A < B) ? -1 : 1; } 2. // 偷懶寫法,要小心overflow int comp(const void *p, const void *q){ return *(int *)p - *(int *q); } 3. // 排字元,一樣要小心overflow int comp(const void *p, const void *q){ return *(char *)p - *(char *)q; } //in main: qsort(A, N, sizeof(char), comp);

一些飯粒範例 4. // double最好這樣寫不然會壞掉 int comp(const void *p, const void *q){ double A =

一些飯粒範例 4. // double最好這樣寫不然會壞掉 int comp(const void *p, const void *q){ double A = *(double *)p; double B = *(double *)q; if ( A == B ) return 0; return (A < B) ? -1 : 1; } // in main: qsort(nums, N, sizeof(double), comp); 5. // 比字串 #include <string. h> int comp(const void *p, const void *q){ char *str. A = *(char **)p; char *str. B = *(char **)q; return strcmp(str. A, str. B); } // in main: qsort(strs, N, sizeof(char *), comp);

一些飯粒範例 6. // 比struct edge{ int st, ed, cost; }edges[100]; int comp(const void struct

一些飯粒範例 6. // 比struct edge{ int st, ed, cost; }edges[100]; int comp(const void struct edge A = struct edge B = return A. cost – } *p, const void *q){ *(struct edge *)p; *(struct edge *)q; B. cost; //一樣要小心overflow //in main: qsort(edges, 100, sizeof(struct edge), comp);

小小範例 int ind[5]; int height[5], weight[5], age[5]; int comp(const void *p, const void *q)

小小範例 int ind[5]; int height[5], weight[5], age[5]; int comp(const void *p, const void *q) int main() { int i; for(i=0; i<5; i++) { scanf(“%d %d %d”, &height[i], &weight[i], &age[i]); ind[i] = i; // 生成“索引”陣列 } qsort(ind, 5, sizeof(int), comp); //讓他去排索引 for(i=0; i<5; i++) { printf(“%d: %d”, ind[i], height[ind[i]]); printf(“ %d”, weight[ind[i]]); printf(“ %d”, age[ind[i]]); } return 0; } int comp(const void *p, const void *q) { return height[*(int *)p] – height[*(int *)q]; // 比較時是以索引去找資料比 }