C语言qosrt排序问题

在MDK中使用qsort排序时发现会卡死:

#include <stdio.h>
#include <stdlib.h>

int testdata[200] = {0,6,3};

int testcnt;
int compare(const void *a, const void *b) {
    testcnt++;
    if (*(int *)a < *(int *)b) return -1;
    else if (*(int *)a > *(int *)b) return 1;
    else return 0;
}

void qsort_test(void) {
    qsort(testdata, 200, sizeof(int), compare);

    testcnt = testcnt;
}

1、打开MicroLib使用qsort会导致排序卡死,但是增加栈空间后可以正常排序
2、 关闭MicroLib排序正常

3、打开MicroLib后,testcnt计数19902次,而关闭MicroLib后testcnt计数在1139次,可见打开MicroLib时调用的比较函数次数远大于未打开MicroLib时

可能的原因:MicroLib中的qsort函数可能使用了函数递归的方法,有栈溢出问题,所以当排序的数据量大时,会导致栈空间溢出

而标准C库中的qsort函数使用了伪递归的方法,仅在函数内部递归,不会有栈溢出问题

posted @ 2024-12-02 11:19  yeshenmeng  阅读(1)  评论(0编辑  收藏  举报