zoukankan      html  css  js  c++  java
  • qsort小总结

    qsort,包含在stdlib.h头文件里,函数一共四个参数,没返回值.一个典型的qsort的写法如下
    
    qsort(s,n,sizeof(s[0]),cmp);
    
    其中第一个参数是参与排序的数组名(或者也可以理解成开始排序的地址,因为可以写&s[i]
    这样的表达式,这个问题下面有说明); 第二个参数是参与排序的元素个数; 第三个三数是
    单个元素的大小,推荐使用sizeof(s[0])这样的表达式,下面也有说明 :) ;第四个参数就是
    很多人觉得非常困惑的比较函数啦,关于这个函数,还要说的比较麻烦...
    
    我们来讨论cmp这个比较函数(写成cmp是我的个人喜好,你可以随便写成什么,比如qcmp什么
    的).典型的cmp的定义是
    
    int cmp(const void *a,const void *b);
    /*
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    
    int s[10000],n,i;
    
    int cmp(const void *a, const void *b)
    {
         return (*(int *)a-*(int *)b);/// 正的就是从小到大排 负的就是从大到小排
    }
    
    int main()
    {
         scanf("%d",&n);
         for(i=0;i<n;i++) scanf("%d",&s[i]);
    
         qsort(s,n,sizeof(s[0]),cmp);
    
         for(i=0;i<n;i++) printf("%d ",s[i]);
    
         return(0);
    }
    */
    /*
    #include <cstdio>
    #include <cstdlib>
    
    struct node
    {
         double date1;
         int no;
    } s[100];
    
    int i,n;
    
    int cmp(const void *a,const void *b)
    {
         ///struct node *aa=(node *)a;
         ///struct node *bb=(node *)b;
         ///return(((aa->date1)>(bb->date1))?1:-1);
         return ((node*)a)->date1 - ((node*)b)->date1;
    }
    
    int main()
    {
         scanf("%d",&n);
         for(i=0;i<n;i++)
         {
             s[i].no=i+1;
             scanf("%lf",&s[i].date1);
         }
         qsort(s,n,sizeof(s[0]),cmp);
    
         for(i=0;i<n;i++) printf("%d   %lf
    ",s[i].no,s[i].date1);
    
         return(0);
    }
    */
    
    ///No.6.对结构体排序.加入no来使其稳定(即data值相等的情况下按原来的顺序排)
    /*
    #include <stdio.h>
    #include <stdlib.h>
    
    struct node
    {
         double date1;
         int no;
    } s[100];
    
    int i,n;
    
    int cmp(const void *a,const void *b)
    {
         ///struct node *aa=(node *)a;
         ///struct node *bb=(node *)b;
    
         ///if(aa->date1!=bb->date1)
             ///return(((aa->date1)>(bb->date1))?1:-1);
             
        if(((node*)a)->date1!=((node*)b)->date1)
             return(((((node*)a)->date1)>(((node*)b)->date1))?1:-1);
         else
             return((((node*)a)->no)-(((node*)b)->no));
    }
    
    int main()
    {
         scanf("%d",&n);
         for(i=0;i<n;i++)
         {
             s[i].no=i+1;
             scanf("%lf",&s[i].date1);
         }
         qsort(s,n,sizeof(s[0]),cmp);
    
         for(i=0;i<n;i++) printf("%d   %lf
    ",s[i].no,s[i].date1);
    
         return(0);
    }
    */
    /*
    5
    1.1 2.2 1.1 3.3 0.0
    5   0.000000
    1   1.100000
    3   1.100000
    2   2.200000
    4   3.300000
    
    Process returned 0 (0x0)   execution time : 19.668 s
    Press any key to continue.
    */
    ///对字符串数组的排序(char s[][]型)
    /*
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    char s[100][100];
    int i,n;
    
    int cmp(const void *a,const void *b)
    {
         return(strcmp((char*)a,(char*)b));
    }
    
    int main()
    {
         scanf("%d",&n);
         for(i=0;i<n;i++) scanf("%s",s[i]);
    
        
         qsort(s,n,sizeof(s[0]),cmp);
        
         for(i=0;i<n;i++) printf("%s
    ",s[i]);
        
         return(0);
    }
    
    ///对字符串数组排序(char *s[]型)
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    char *s[100];
    int i,n;
    
    int cmp(const void *a,const void *b)
    
    {
         return(strcmp(*(char**)a,*(char**)b));
    }
    
    int main()
    {
         scanf("%d",&n);
         for(i=0;i<n;i++)
         {
             s[i]=(char*)malloc(sizeof(char*));
             scanf("%s",s[i]);
         }
    
         qsort(s,n,sizeof(s[0]),cmp);
    
         for(i=0;i<n;i++) printf("%s
    ",s[i]);
    
         return(0);
    }
    */

    很久以前从csdn上粘下来的,不记得原作者是谁了。

  • 相关阅读:
    【bug】Android版QQ浏览器广告过滤
    -_-#ueditor编辑器chrome浏览器下只能复制最后一行
    -_-#骗子
    -_-#URL区分大小写吗
    -_-#傻傻分不清楚
    -_-#【Canvas】绘制文本
    -_-#【JS Engine】
    -_-#【浏览器】
    -_-#【Canvas】导出在<canvas>元素上绘制的图像
    COGS——C 908. 校园网 || 洛谷——P 2746 [USACO5.3]校园网Network of Schools
  • 原文地址:https://www.cnblogs.com/AbsolutelyPerfect/p/8253068.html
Copyright © 2011-2022 走看看