qsort与sort效率用法比较
很多枚举题目都需要用先排序再二分查找,虽然考的知识点主要是枚举的剪枝,但是二分查找和排序有时候也会成为时间的瓶颈。所以,在这种分秒必争的题目中,选择一个好的排序和二分查找算法函数来调用无以会节省一点点时间。
bsearch有现成的库函数,(注意这个拼写)调用格式为
find=(point_type*) bsearch((const void*) key,p,n,sizeof(point_type),compare);
而自己实现二分查找比较慢,且容易写错,耗费时间编程,而STL的binary_search()又伴随着容器,所以二分查找肯定使用bsearch()。
那么对于qsort与sort,建议用qsort(),因为qsort()比较快,而sort()对应了一个算法模板,属于C++风格的,更慢一些,qsort调用格式为
qsort(p,n,sizeof(point_type),compare);
其中compare与bsearch中一样,格式为
int _type_compare(const void* e1,const void* e2)
{
return ((const _type*) e1)->num-((const _type*) e2)->num;
}
下面的代码比较了qsort和sort的效率,通过合理的宏定义可以开启不同测试模式
某一次测试的耗时为:
sort对int类型数据排序 2.576s
qsort对int类型数据排序 0.8418s
sort对结构类型数据排序 2.585s
qsort对结构类型数据排序 0.9964s