标题:strcmp_for_qsort和挂羊头卖狗肉的qsort 出处:Felix021 时间:Mon, 28 Jun 2010 22:14:54 +0000 作者:felix021 地址:https://www.felix021.com/blog/read.php?1888 内容: 对字符指针数组使用qsort排序时,strcmp强制类型转换后不能直接用于qsort, 需要进一步的纠结的。包装…… p.s. 对于字符串数组char a[100][100]; 就可以用strcmp。 #include #include #include typedef int (*cmp_func)(const void *, const void *); int strcmp_for_qsort(const void *a, const void *b) { char *x = *(char **)a, *y = *(char **)b; return strcmp(x, y); } void quicksort(void *p, int num, unsigned size, cmp_func cmp) { int i, j; char *pos, *t = (char *) malloc(size); if (t == NULL) exit(1); for (i = 0; i < num; i++) { for (j = 0, pos = (char *)p; j < num - 1; j++, pos += size) { if (cmp(pos, pos + size) > 0) { memcpy(t, pos, size); memcpy(pos, pos + size, size); memcpy(pos + size, t, size); } } } free(t); } int main() { char *pos[5] = {"a", "c", "e", "b", "d"}; //qsort(pos, 5, sizeof(pos[0]), strcmp_for_qsort); // in stdlib quicksort(pos, 5, sizeof(pos[0]), strcmp_for_qsort); //fake for (int i = 0; i < 5; i++) puts(pos[i]); return 0; } Generated by Bo-blog 2.1.0