zoukankan      html  css  js  c++  java
  • qsort用法总结

    一、对int类型数组排序

    1 int num[100];
    2 int cmp ( const void *a , const void *b )
    3 {
    4 return *(int *)a - *(int *)b;
    5 }
    6 qsort(num,100,sizeof(num[0]),cmp);
    View Code

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

    1 char word[100];
    2 
    3 int cmp( const void *a , const void *b )
    4 {
    5 return *(char *)a - *(int *)b;
    6 }
    7 
    8 qsort(word,100,sizeof(word[0]),cmp);
    View Code

    三、对double类型数组排序

    1 double in[100];
    2 int cmp( const void *a , const void *b )
    3 {
    4 return *(double *)a > *(double *)b ? 1 : -1;
    5 }
    6 qsort(in,100,sizeof(in[0]),cmp);
    View Code

    四、对结构体一级排序

     1 struct node
     2 {
     3 double data;
     4 int other;
     5 }s[100]
     6 //按照data的值从小到大将结构体排序
     7 int cmp( const void *a ,const void *b)
     8 {
     9 return (*(node *)a).data > (*(node *)b).data ? 1 : -1;
    10 }
    11 qsort(s,100,sizeof(s[0]),cmp);
    View Code

    五、对结构体二级排序

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

    六、对字符串进行排序

     1 #include<stdio.h>
     2 #include<cstring>
     3 #include<cstdlib>
     4 char s[10010][100];
     5 int cmp(const void *a,const void *b)
     6 {
     7     return strcmp((char *)a,(char *)b);
     8 }
     9 int main()
    10 {
    11     int Q,i,n;
    12     scanf("%d",&Q);
    13     while(Q--)
    14     {
    15         memset(&s,0,sizeof(s));
    16         scanf("%d",&n);
    17         for(i=0;i<n;i++)
    18         {
    19             scanf("%s",s[i]);
    20         }
    21         qsort(s,n,sizeof(s[0]),cmp);
    22         for(i=0;i<n;i++)
    23         {
    24             printf("%s",s[i]);
    25         }
    26         printf("
    ");
    27     }
    28     return 0;
    29 }
    View Code

    按照结构体中字符串str的字典顺序排序

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

    附加一个完整点的代码,对字符串二维数组排序:

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 char s[2001][1001];
     5 int cmp(const void *a, const void *b)
     6 {
     7     return strcmp((char *)a,(char *)b);
     8 }
     9 int main(){
    10     int i,n;
    11     scanf("%d",&n);
    12     getchar();
    13     for(i=0;i<n;i++) gets(s[i]);
    14     qsort(s,n,1001*sizeof(char),cmp);
    15     for(i=0;i<n;i++) puts(s[i]);
    16     return 0;
    17 }
    View Code

    如果是一个结构体的话: struct node {          int x,y;      }

    按x排序的话,就这样用: bool comp(const &a,const &b){return a.x

    这里关键要理解   &   这个符号 举个简单点的例子来说:

    int a=10; int &b=a;

    这样b就和a完全一样啦

    这个东东是相当好用的,比如我们想调用f(a,b,c)函数,并且希望对abc的值进行改变的话 。在c里面ms只可以用指针来实现。 但是用指针比较麻烦 有 & 这个符号就好用啦。

  • 相关阅读:
    Java 使用对话框选择文件并输出到控制台
    Java 数组 可变长参数 实例
    Java 返回一个整数的各个数字之和的一种方法
    weblogic控制台部署web项目图解
    合理的饮食+适当的运动=健康的身体
    Linux远程管理器xshell和xftp使用教程,以及遇到关闭Xshell后项目也停止的解决方法
    java使用freemarker 生成word文档
    MyEclipse 2014优化设置(禁用myeclipse updating indexes)
    ORACLE中查询被锁定的表,以及如何解锁
    MySql查询优化
  • 原文地址:https://www.cnblogs.com/zeze/p/qsortsuma.html
Copyright © 2011-2022 走看看