u010479604 2018-11-23 07:10 采纳率: 83.3%
浏览 474
已采纳

求用C语言利用快速排序法完成数组排序,完成如下例子,谢谢谢谢:

排序前:
1 1 1 1.1
1 1 3 1.2
2 1 3 2.9
1 2 1 1.2
2 1 2 2.8
1 2 2 1.5
2 2 2 3.1
1 2 3 2.3
2 2 1 3.0
1 1 2 2.5
1 2 4 2.4
1 3 1 2.6
2 1 1 2.7
2 2 3 3.2

排序后:
1 1 1 1.1
1 1 2 2.5
1 1 3 1.2
1 2 1 1.2
1 2 2 1.5
1 2 3 2.3
1 2 4 2.4
1 3 1 2.6
2 1 1 2.7
2 1 2 2.8
2 1 3 2.9
2 2 1 3.0
2 2 2 3.1
2 2 3 3.2

  • 写回答

1条回答 默认 最新

  • hpu刘 2018-11-23 09:09
    关注

    qsort对结构体进行快速排序,直接上代码如下:

     #include<stdio.h>
    #include<stdlib.h>
    
    struct item
    {
        int a;
        int b;
        int c;
        double d;
    };
    
    int cmp(const void *a, const void*b)
    {
        struct item *c = (struct item *)a;
        struct item *d = (struct item *)b;
        if(c->a != d->a)
            return c->a - d->a;
        else if(c->b != d->b)
            return c->b - d->b;
        else if(c->c != d->c)
            return c->c - d->c;
        else
            return c->d < d->d;
    }
    
    int main()
    {
        int n,i,a,b,c;
        double d;
        struct item m[100];
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%d%d%d%lf",&a,&b,&c,&d);
            m[i].a = a;
            m[i].b = b;
            m[i].c = c;
            m[i].d = d;
        }
    
        qsort(m,n,sizeof(m[0]),cmp);
    
        printf("排序后:\n");
        for(i=0;i<n;i++)
            printf("%d %d %d %.1lf\n",m[i].a,m[i].b,m[i].c,m[i].d);
    
        system("pause");
        return 0;
    }
    

    运行结果如下:

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 数学的三元一次方程求解
  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题