1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #include <stdio.h> #include <stdlib.h> #include <string.h>
int cmpint(const void *a, const void *b) { return *(int *)a - *(int *)b; }
int cmpchar(const void *a, const void *b) { return *(char *)a - *(char *)b; }
如果是两个很接近的数则可能返回一个小数(大于 -1,小于1),而cmp的返回值是int型, 因此会将这个小数返回0,系统认为是相等,失去了本来存在的大小关系*/ int cmpdouble(const void *x, const void *y) { return *(double*)x > *(double*)y ? 1 : -1; }
int main() { int i;
int a[6] = {5,4,1,3,2,6}; qsort(a, 6, sizeof(a[0]), cmpint); for(i = 0; i < 6; i++) printf("%d ",a[i]); printf("\n\n");
int b[5] = {5,4,1,3,2}; qsort(b+2, 3, sizeof(b[0]), cmpint); for(i = 0; i < 5; i++) printf("%d ", b[i]); printf("\n\n");
char s[] = "acBCAb"; int len = strlen(s); qsort(s, len, sizeof(s[0]), cmpchar); for(i = 0; s[i] != '\0'; i++) printf("%c", s[i]); printf("\n\n");
double c[5] = {1.1,1.2,1.3,1.4,1.5}; qsort(c, 5, sizeof(c[0]), cmpdouble); for(i = 0; i < 5; i++) printf("%lf ", c[i]); printf("\n\n"); return 0; }
|