strcmp_for_qsort和挂羊头卖狗肉的qsort - Blog of Felix021 - 如果 ...
strcmp强制类型转换后不能直接用于qsort, 需要进一步的包装……
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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;
}

郑重声明:资讯 【strcmp_for_qsort和挂羊头卖狗肉的qsort - Blog of Felix021 - 如果 ...】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——