c语言qsort函数(关于c语言中qsort函数的用法)

本文目录
关于c语言中qsort函数的用法
快速排序的思想是分治,就举个简单的例子吧
int a={5,4,8,2,6,3,1,7}
1)分解
选取一个数作为基准(pivot),以此基准将当前无序区R,并使左边子区间的数都小于基准数,右边子区间的所有数都大于基准数,基准数位于正确的位置上,无需参加下一轮的排序。
一般取第一个为基准,此处为5,high起往前,若a交换位置,从如此循环直到前后指针相遇。
过程为:
5,4,8,2,6,3,1,7 //1小与5,交换
1,4,8,2,6,3,5,7 //8大与5,交换
1,4,5,2,6,3,8,7 //3小于5,交换
1,4,3,2,6,5,8,7 //6大于5,交换
1,4,3,2,5,6,8,7 //至此5已到正确位置
2)求解
分别对左右两子区间,递归调用qsort,排序
类似上面的例子,就不详解啦~
3)至此完成整个数组的排序
c语言 qsort
排序方法有很多种, 选择排序,冒泡排序,归并排序,快速排序等。
看名字都知道快速排序 是目前公认的一种比较好的排序算法(我没听书速度比这快的了,特殊场合例外),比选择排序,冒泡排序都要快。这是因为他速度很快,所以系统也在库里实现这个算法,便于我们的使用。
这就是qsort。
qsort 要求提供一个 比较函数,是为了做到通用性更好一点。比如你不仅仅的是要排序一个数字而已,可能你要用来排序几个数字 ,比如有一个结构
struct num {
int a;
int b;
};
然后我有一个num 类型的数组, num dddd;
我想给 dddd这个数组排序,那怎么办? 我想让 a +b 最大的num元素排在数组的最前面,那又怎么办?
这都可以通过定义比较函数来做到的。
比较函数的作用就是给qsort指明 元素的大小是怎么比较的。
像这样的比较函数 inline int MyCmp(const void* a, const void* b)
都是有两个元素 作为参数,返回一个int 值, 如果 比较函数返回大于0,qsort就认为 a》b , 如果比较函数返回等于0 qsort就认为a 和b 这两个元素相等,返回小于零 qsort就认为 a《b 。
qsort 知道元素大小,就可以把大的放到前面去。
如果你的比较函数放回本来应该是1 的(a》b),你比较函数却返回一个 -1 (小于零的)那么qsort认为a《b 的,就把 b放到前面去,但实际上是a大于b的,所以就造成升降序的差别了。
同样的道理,如果有一个 结构
strunt 人{
int 身高;
int 体重;
}
你想让身高最小的人排在最前面,那么你也要自己定义自己的比较函数 ,

更多文章:
form表单制作(为什么制作的form表单会在网页显示中多出一行)
2026年10月11日 09:10
teammate(teammate,company,partner)
2026年10月11日 06:10
javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)
2026年10月11日 04:00
text函数公式(excel中round和text函数的区别是什么)
2026年10月11日 03:50
google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)
2026年10月11日 02:00
websocket整合springboot(Springboot整合Websocket遇到的坑)
2026年10月11日 01:40
drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)
2026年10月10日 19:20
xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)
2026年10月10日 17:50


