完全没看懂你的算法,qsort作为经典的算法,基本在任何教程上都可以找到完整的源码,网上也有很多改进过的,但一般都由二个函数组成,排序和分区,你把它们合而为一,但程序的确有问题,我单步了下,先不说效率(你的循环明显多了),你的第一个循环结束,i和j都为0,第二个循环不可能被执行,直接进入第一个递归,参数为 fast(wait, 0, -1); 因为begin<end,直接退出,执行第二个递归,参数为 fast(wait, 0, 9); //因为j=0,end没有变,你会发现与你原始调用一样的,也就是递归死循环了,结果当然是栈溢出建议使用标准的qsort参考int part(int *r,int i, int j){ int flag = r[i]; while(i < j) { while(i < j && r[j] >= flag) j--; if(i < j) r[i++] = r[j]; while(i < j && r[i] <= flag) i++; if(i < j) r[j--] = r[i]; } r[i] = flag; return i;}void fast(int *wait,int low, int high){ int f; if(low < high) { f = part(wait,low, high); fast(wait,low, f - 1); fast(wait,f + 1, high); }}