c语言qsort函数详解的简单介绍( 二 )


Orwell Dev-C++,可移植的C/C++IDE
C-Free
Light Table
Visual Studio系列
Hello World
参考资料:百度百科-sort函数
关于c语言中qsort函数的用法排序方法有很多种,选择排序 , 冒泡排序 , 归并排序,快速排序等 。
看名字都知道快速排序 是目前公认的一种比较好的排序算法(我没听书速度比这快的了,特殊场合例外) , 比选择排序,冒泡排序都要快 。这是因为他速度很快,所以系统也在库里实现这个算法,便于我们的使用 。
这就是qsort 。
qsort 要求提供一个 比较函数,是为了做到通用性更好一点 。比如你不仅仅的是要排序一个数字而已,可能你要用来排序几个数字,比如有一个结构
struct num {
int a;
int b;
};
然后我有一个num 类型的数组,numdddd[100];
我想给 dddd这个数组排序,那怎么办? 我想让 a +b 最大的num元素排在数组的最前面 , 那又怎么办?
这都可以通过定义比较函数来做到的 。
比较函数的作用就是给qsort指明 元素的大小是怎么比较的 。
像这样的比较函数 inline int MyCmp(const void* a, const void* b)
都是有两个元素 作为参数 , 返回一个int 值 ,  如果 比较函数返回大于0,qsort就认为 ab , 如果比较函数返回等于0 qsort就认为a 和b 这两个元素相等,返回小于零 qsort就认为 ab。
qsort 知道元素大小 , 就可以把大的放到前面去 。
如果你的比较函数放回本来应该是1 的(ab),你比较函数却返回一个 -1 (小于零的)那么qsort认为ab 的,就把 b放到前面去,但实际上是a大于b的,所以就造成升降序的差别了 。
同样的道理,如果有一个 结构
strunt 人{
int 身高;
int 体重;
}
你想让身高最小的人排在最前面,那么你也要自己定义自己的比较函数
C++中qsort怎么用C++的qsort其实是一个回调函数,最重要的就是最后一个参数 , 它使用的是函数指针,使用的时候把某个函数名赋给这个函数指针就可以用了 。所以关键的地方就是你如何定义这个compare函数了!楼上的同学例子给的很好,当然你还可以使用其他数据类型如float,double , char等等 。其实这个函数目的就是为了实现重载 , 因为它是用c语言写的,所以得用回调函数来实现重载 。
c语言qsort函数详解的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、c语言qsort函数详解的信息别忘了在本站进行查找喔 。

推荐阅读