关于C#:qsort()性能问题

qsort() performance issue

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

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

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

传递到qsort的比较函数:

1
2
3
4
5
6
7
8
9
10
11
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的电话:

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

谢谢你的意见。


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

您分配(WordsArray*)指针只是为了在下一行上重写它们,从而在进程中造成内存泄漏。您只需删除EDOCX1[2]s:

1
2
3
4
5
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);
}