• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
youdiankun
博客园    首页    新随笔    联系   管理    订阅  订阅

c语言中的qsort函数(转)

做题时自己也不是很清楚,转来别人的学习一下。

 

一、对int类型数组排序
    int num[100];     int cmp ( const void *a , const void *b )    

{        

return *(int *)a - *(int *)b;     

}
    可见:参数列表是两个空指针,现在他要去指向你的数组元素。所以转型为你当前的类型,然后取值。升序排列。     因为是按照acsll码的值进行的,所以在前面的字符的值一定小于后面的字符。 那么,对于a b,如果a的值>b的值,就说明在字母表中a在b的后面,返回值为1表示ture,执行交换。


     qsort(num,100,sizeof(num[0]),cmp);


二、对char类型数组排序(同int类型)
    char word[100];     int cmp( const void *a , const void *b )   

{      

   return *(char *)a - *(int *)b;    

}

    qsort(word,100,sizeof(word[0]),cmp);


三、对double类型数组排序(特别要注意)
    double in[100];    

int cmp( const void *a , const void *b )    

{        

return *(double *)a > *(double *)b ? 1 : -1;       //返回值的问题,显然cmp返回的是一个整型,所以避免double返回小数而被丢失。     

}

 qsort(in,100,sizeof(in[0]),cmp);


四、对结构体一级排序
    struct In    

{        

double data;         i

nt other;     

}s[100]     //按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写

 

    int cmp( const void *a ,const void *b)    

{        

return (*(In *)a).data > (*(In *)b).data ? 1 : -1;

 }

 

   qsort(s,100,sizeof(s[0]),cmp);


五、对结构体二级排序    

struct In   

{       

int x;       

int y;    

}s[100];                      //按照x从小到大排序,当x相等时按照y从大到小排序


int cmp( const void *a , const void *b )   

{       

  struct In *c = (In *)a;       

  struct In *d = (In *)b;       

  if(c->x != d->x) return c->x - d->x;       

  else return d->y - c->y;    

}

    qsort(s,100,sizeof(s[0]),cmp);


六、对字符串进行排序   

char str[100][100];   

int cmp(const void* a,const void* b )   

{       

return strcmp((char *)a,(char*)b);   

}   

qsort(str,n,sizeof(str[0]),cmp);
 
 struct In   

{        

int data;        

char str[100];   

}s[100];                                              //按照结构体中字符串str的字典顺序排序


 int cmp ( const void *a , const void *b )   

{       

return strcmp( (*(In *)a)->str , (*(In *)b)->str );    

}
 qsort(s,100,sizeof(s[0]),cmp);
   

posted @ 2013-09-04 17:53  youdiankun  阅读(364)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3