大家竞相转载的 《qsort的七种排序》里面有不少细节问题,由于原版不知道是哪里的,所以部分错误可能是转载人漏掉或者误添的,这个暂且不谈,不过今天在hnu的论坛上看见yiyi的回复才知道原来最大的问题是出在作者的cmp函数里面:
qsort 要注意的问题int cmp ( const void *a , const void *b )
}

这个问题出在 当a是int的最大值(2^31 - 1),b是int的最小值(-2^31)时,a - b会溢出,返回了一个正数,言下之意就是说a < b了,这显然是错误的了。(赞一下yiyi,估计srm 中cha人cha的比较多了)

这个问题比较好的解决方法是采用比较,而不是这种看似很有“技巧”的写法或者使用STL中的std::sort

下面给出测试代码,希望大家少犯错误:-)

qsort 要注意的问题#include <cstdlib>
qsort 要注意的问题#include 
<algorithm>
qsort 要注意的问题#include 
<iostream>
qsort 要注意的问题
qsort 要注意的问题
using namespace std;
qsort 要注意的问题
qsort 要注意的问题
int cmp(const void* a, const void * b)
}

相关文章: