qsort()性能问题

时间:2015-04-14 16:15:12

标签: c arrays struct qsort

我成功排序了一个结构数组,其中每个结构只包含一个char字符串。然而,我的问题是,对于大约的结构数组。 900,000个元素,qsort比我预期的要长很多(qsort需要大约2分钟来排序这个数组);让我觉得我在这里可以忽略一些东西。 排序是我正在进行的任务的一个微不足道的部分,并且完全超过了我对我的程序的时间限制。

以下是我的代码的相关部分:

struct WordsArray //Just a struct thath holds a *char
{
    char word[25];
};

比较传递给qsort的函数:

int cmpfunc(const void *a, const void *b)
{
    const struct WordsArray *a1;
    a1 = (WordsArray*)malloc(sizeof(WordsArray));
    const struct WordsArray *b1;
    b1 = (WordsArray*)malloc(sizeof(WordsArray));
    a1 = (struct WordsArray*)a;
    b1 = (struct WordsArray*)b;

    return strcmp(a1->word, b1->word);
}

我打电话给qsort:

WordsArray *AllWordsArray;
AllWordsList = (WordsArray*)malloc(sizeof(WordsArray)*ListSize);
qsort(AllWordsList->word, ListSize, sizeof(struct WordsArray), cmpfunc);

感谢您的意见。

1 个答案:

答案 0 :(得分:4)

问题在于cmpfunc的实施:它比消防栓更快地泄漏内存!

您正在分配(WordsArray*)指针,仅在下一行写入它们,从而在进程中创建内存泄漏。您需要做的就是删除malloc s:

int cmpfunc(const void *a, const void *b) {
    const struct WordsArray *a1 = (struct WordsArray*)a;
    const struct WordsArray *b1 = (struct WordsArray*)b;
    return strcmp(a1->word, b1->word);
}