qsort()排序

一 、qsort()的四个参数。

    头文件:c:<string.h>

    

          一)、 1 待排序数组首地址2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针

          

         二)、 int类型数组排序

          int num[100];

          Sample: int cmp ( const void *a , constvoid*b )

          { return *(int *)a - *(int *)b; }

          qsort(num,100,sizeof(num[0]),cmp);

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

         char word[100];

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

         { return *(char *)a - *(int *)b; }

         qsort(word,100,sizeof(word[0]),cmp);

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

         double in[100];

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

         { return *(double *)a > *(double *)b ?1: -1; }

         qsort(in,100,sizeof(in[0]),cmp)

         五)、qsort只针对某一行进行排序,其他行不进行改变

              参照水题抛硬币的题解:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
double a[15][105];
int cmp(const void*a,const void *b){
    return *(double*)a-*(double*)b;
}
int main(){
    int n,m;
    while(~scanf("%d %d",&n,&m)){
        if(n==0&&m==0)break;
        double s=0;
        double p;
        memset(a,0,sizeof(a));
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++)
                scanf("%lf",&a[j][i]);
        }
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++)
            printf("%lf  ",a[i][j]);
            printf("\n");
        }
        for(int i=0;i<m;i++){
            qsort(a[i],n,sizeof(a[i][0]),cmp);
        }
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++)
            printf("%lf  ",a[i][j]);
            printf("\n");
        }
        for(int i=0;i<n;i++){
            p=1;
            for(int j=0;j<m;j++){
                p=p*a[j][i];
            }
            s=s+p;
        }
        printf("%.4lf\n",s);
    }
    return 0;
}

结果为:

         六)、qsort关于一个列进行整体排序

             例如只针对二维数组的第一列进行排序

             #include<stdio.h>
             #include<stdlib.h>
             #include<string.h>
             #include<math.h>
             int cmp(const void *a, const void *b)
              {
                     int *c = (int *)a;
                     int *d = (int *)b;
                     if (*c != *d)
                       return *c - *d;
                       return *(d + 1) - *(c + 1);
             }
             int main()
             {
               int i, j,n,m;
               int a[105][15];
               while(scanf("%d %d",&n,&m)){
                        for(i=0;i<n;i++){
                            for(j=0;j<m;j++)
                                 scanf("%d",&a[i][j]);
                        }
                        qsort(a, n, sizeof(a[0]), cmp);
                        for (i = 0; i<n; i++)
                        {
                            for (j = 0; j<m; j++)
                                 printf("%d ", a[i][j]);
                            printf("\n");
                        }
                        system("pause");
                        }
                        return 0;
                        }

运行结果为:

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值