荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: huhaiming (一生只爱她), 信区: Program
标  题: Re: stdlib里面的快速排序和二分查找
发信站: 荔园晨风BBS站 (Thu Mar 18 12:44:07 2004), 站内信件


1、cmp的参数有误,需要用const
2、可以得到结果,但是不够安全,建议还是返回结构体的int元素大小关系会好一点
   譬如:你试试更改了定义的顺序
struct node{
         char ch;
         int info;
         };
你看看运行的结果是否还是如愿? (即时你把qsort的第一个参数修改正确为a)

【 在 kali (江火) 的大作中提到: 】
: 我这样可以得结果,你看如何?
: #include <stdio.h>
: #include <stdlib.h>
: struct node{
:         int info;
:         char ch;
:         };
: int n=6;
: int cmp(void *p,void *q)
: {
:     return *(int*)p-*(int*)q;
: }
: int main()
: {
:   int i;/*info[6]={1,53,9,23,11,25};    */
:   struct node a[6]={{1,'a'},{53,'m'},{9,'p'},{23,'u'},{11,'s'},{25,'t'}};
:   for(i=0;i<n;i++) printf("a[%d]=%d %c\n",i,a[i].info,a[i].ch);
:   qsort(&a[0].info,n,sizeof(a[0]),cmp);
:   for(i=0;i<n;i++) printf("a[%d]=%d %c\n",i,a[i].info,a[i].ch);
:   return 0;
: }
: 【 在 huhaiming (一生只爱她) 的大作中提到: 】
: : 可以的。比较函数的大小关系是适当更改。
: : 调用qsort时的参数也要注意更改。
: : int cmp(const void *p,const void *q)
: : {
: :     struct node *r,*s;
: :     r=(struct node*)p,s=(struct node*)q;
: :     return r->info-s->info;
: : }
: : 调用时: qsort(a,sizeof(a)/sizeof(a[0]),sizeof(struct node),cmp);  //排序
: : //直接写成 qsort(a,5,sizeof(struct node),cmp);  也可以


--

菩提本无树,明镜亦非台

本来无一物,何处惹尘埃

※ 修改:·huhaiming 於 Mar 18 12:46:54 修改本文·[FROM: 61.144.235.39]
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 61.144.235.39]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店