c语言如何用qsort排序

 我来答
jianfeng4207
2012-10-28 · TA获得超过107个赞
知道小有建树答主
回答量:84
采纳率:0%
帮助的人:97.7万
展开全部
试想一御举下,如果让你自己设计qsort函数,需要些什么东西,首地址要有吧,总共有几个元素要有吧,每个元素占多大的内存要有吧(想想就知道函数内部要弊高根据内存块的大小交换数据实现排序),最后一个规则总要有吧,qsort的灵活性在于规则是活的不是死的,其实大多数语言的排序都是类似的机制啦。。。看下qsort的原型
void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
base就是所谓的首地址,nelem就是元素个数,width,就是每个元素的大小,fcmp是一个函数指针,这里函数的定义要类似于int cmp(const void*a,const void*b),其实很多人不知道怎么使用qsort主要是在于对这个函数不懂得如何写,其实想想就知道函数把每个元素的地址扔给比较函数,根据比较函数的返回值来决定到底是a在前面还是b在前面,所以在函数里面要先取出值,所以一般的写法就是
int cmp(const void*a,const void*b)
{
return *(T*)a-*(T*)b;

}
先强制转换成T类型再用取值符号*取出指,函数之所以用空指针是因为空指针可以指向任何类型,对于基本类型,只要将T修改为基本类型就行了,对于结构体之类的的指针,租拆尺则return ((T*)a)->x-((T*)b)->x;其中T就是结构体的名称,x就是你要比较的字段,当然如果你要降序的话就将ab颠倒就行了,说了这么多,写一个例子,比如要对下面的数组排序
int a[5]={2,10,5,4,0};
qsort(a,5,sizeof(int),cmp);
比较函数
int cmp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
。。呵呵,啰嗦了点。希望对你有帮助
miss_feier
2012-10-29 · 超过23用户采纳过TA的回答
知道答主
回答量:106
采纳率:0%
帮助的人:36.6万
展开全部
想要自己写 就根据快排原理写就行 网上很多例子 要是想直接用 就调用STL模板库
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ed6811bc6
2012-11-05 · 超过51用户采纳过TA的回答
知道小有建树答主
回答量:96
采纳率:100%
帮助的人:129万
展开全部
qsort是标准库中的函数,可以直接使用蚂型的:
void qsort(
void *base,
size_t num,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);

记得察物橘#include <败团stdlib.h>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式