zoukankan      html  css  js  c++  java
  • c语言中的qsort用法

    1.首先了解

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

    表示声明cmp函数,其返回值为int型,参数为两个不可修改(const)的void型指针

    2.函数原型

    函数声明

    void qsort(void *base, number, size, int (*cmp)(const void *p1, const void*p1))

    参数

    • base-- 指向要排序的数组的第一个元素的指针。//一般填写数组名
    • number-- 由 base 指向的数组中元素的个数。
    • size-- 数组中每个元素的大小,以字节为单位。
    • cmp-- 用来比较两个元素的函数.
         int compar(const void *p1, const void *p2)
                {return *(int*)p2-*(int*)p2;}//这个是由小到大排序,return *(int *)p2 - *(int *)p1; 为由大到小排序。
           如果cmp返回值小于0(< 0),那么p1所指向元素会被排在p2所指向元素的左边;
      如果cmp返回值等于0(= 0),那么p1所指向元素与p2所指向元素的顺序不确定;
      如果cmp返回值大于0(> 0),那么p1所指向元素会被排在p2所指向元素的右边。
     
    3.调用该函数需要声明  #include<stdlib.h>
    4.对二维数组进行排序,本质是对每行的首地址元素进行排序
    #include<stdio.h>
    #include<stdlib.h>
    int comp(const void*a,const void*b)
    {
        return ((int*)a)[0]-((int*)b)[0];
    }
    int main()
    {
        int i,j;
        int a[1000][2];
        int n;
        scanf("%d",&n);//假设n=3
    
        for(i=0;i<n;i++)
            for(j=0;j<2;j++)
                scanf("%d",&a[i][j]);//假设输人4,2,1,3,5,6
    //实际是对4,1,5进行排序 qsort(a,n,
    sizeof(int)*2,comp); for(i=0;i<n;i++) for(j=0;j<2;j++) printf("%d ",a[i][j]);//输出1,3,4,2,5,6 return 0; }

    5.对结构体中的某个元素排序

    #include<stdio.h>
    #include<stdlib.h>
    struct In    
        {
        int data;
        int other;
        }s[100];
    int cmp( const void *a ,const void *b)
     
    {
       // return (*(In *)a).data > (*(In *)b).data ? 1 : -1;
     //转自大佬..
       //注意,这条语句在VC6.0环境下运行可能会出错,但是并不是语句错了,而是你要先 Build ,或者全部重建。总之语句是对的。 
      // 或者你可以将这上面1条语句改成下面这3条语句
     
       struct In *aa = (In *)a;
       struct In *bb = (In *)b;
       return aa->data > bb->data ? 1 : -1;//data可以换成结构体中的其他项
    }
    
    int main()
    {   
        int n,i;
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%d%d",&s[i].data,&s[i].other);
        qsort(s,n,sizeof(s[0]),cmp);
        for(i=0;i<n;i++)
            printf("%d
    ",s[i].data);
    
        return 0;
    }
  • 相关阅读:
    第三周作业
    第二周作业 编程总结
    编程总结二 求最大值及其下标
    编程总结一 查找整数
    第十周课程总结
    第九周课程总结&实验报告(七
    第八周课程总结&实验报告(六)
    第七周课程总结&实验报告(五)
    第六周&java实验报告四
    第五周的作业
  • 原文地址:https://www.cnblogs.com/zhuimingzhenbai/p/12374326.html
Copyright © 2011-2022 走看看