zoukankan      html  css  js  c++  java
  • qsort 模板

    转:http://blog.csdn.net/fans_men/article/details/6955606

    七种qsort排序法

    <本文中排序都是采用的从小到大排序> 

    其中的在c语言中qsort函数包含在<stdlib.h>的头文件里,strcmp包含在<string.h>的头文件里。

    一、对int类型数组排序  

    [cpp] view plaincopy
     
    1. int num[n];   
    2.    
    3. int cmp(const void *a,const void *b)   
    4. {   
    5.      return *(int *)a-*(int *)b;   
    6. }   
    7. qsort(num,n,sizeof(num[0]),cmp);  


    二、对char类型数组排序(同int类型) 

    [cpp] view plaincopy
     
    1. char c[n];   
    2.    
    3. int cmp(const void *a,const void *b)   
    4. {   
    5.     return *(char *)a-*(char *)b;   
    6. }  
    7. qsort(c,n,sizeof(c[0]),cmp);  

      

    三、对double类型数组排序(要特别注意)

    [cpp] view plaincopy
     
    1. double num[n];  
    2.    
    3. int cmp(const void *a,const void *b)   
    4. {   
    5.     return *(double *)a>*(double *)b ? 1 : -1;   
    6. }   
    7. qsort(num,n,sizeof(num[0]),cmp);  


    四、对结构体一级排序 

    [cpp] view plaincopy
     
    1. struct stu  
    2. {  
    3.     double data;   
    4.     int other;   
    5. }s[n];     
    6.   
    7. /*按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可 
    8.   以很多种,参考上面的例子写 
    9. */   
    10. int cmp(const void *a,const void *b)   
    11. {   
    12.      return (*(struct stu *)a).data>(*(struct stu *)b).data ? 1 : -1;   
    13. }   
    14. qsort(s,n,sizeof(struct stu),cmp);  

     

    五、对结构体二级排序 

    [cpp] view plaincopy
     
    1. struct stu  
    2. {  
    3.     int x;  
    4.     int y;  
    5. }s[n];           
    6.   
    7. //按照x从小到大排序,当x相等时按照y从大到小排序  
    8. int cmp(const void *a,const void *b)  
    9. {  
    10.     struct stu *c=(stu *)a;  
    11.     struct stu *d=(stu *)b;  
    12.     if(c->x != d->x) return c->x - d->x;  
    13.     else return d->y - c->y;  
    14. }  
    15. qsort(s,n,sizeof(s[0]),cmp);  


    六、对字符串进行排序 

    [cpp] view plaincopy
     
    1. struct str  
    2. {   
    3.     int data;   
    4.     char c[100];   
    5. }s[n];              
    6.   
    7. //按照结构体中字符串c的字典顺序排序   
    8. int cmp(const void *a,const void *b)   
    9. {  
    10.     return strcmp((*(str *)a).c,(*(str *)b).c);   
    11. }   
    12. qsort(s,n,sizeof(s[0]),cmp);  


    七、计算几何中求凸包的cmp 

    [cpp] view plaincopy
     
    1. //重点cmp函数,把除了1点外的所有点,旋转角度排序   
    2. int cmp(const void *a,const void *b)   
    3. {   
    4.     struct point *c=(point *)a;   
    5.     struct point *d=(point *)b;   
    6.     if(calc(*c,*d,p[1])<0) return 1;   
    7.     else if(!calc(*c,*d,p[1])&&dis(c->x,c->y,p[1].x,p[1].y)<dis(d->x,d->y,p[1].x,p[1].y))   
    8.     //如果在一条直线上,则把远的放在前面   
    9.     return 1;   
    10.     else return -1;   
    11. }  
     
  • 相关阅读:
    Access数据库连接与Repeater数据控件绑定
    类型空间
    C# ico
    Jackson 框架,轻易转换JSON
    转 Android之项目推荐使用的第三方库,有助于快速开发,欢迎各位网友补充
    天气时段规定
    plupload
    MongoDatabase 数据访问助手类
    android开发教程21篇(版主强烈推荐,几乎每一篇都是精华教程
    Android
  • 原文地址:https://www.cnblogs.com/bibier/p/3904083.html
Copyright © 2011-2022 走看看