qsort()排序

xiaoxiao2021-02-28  85

一 、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;                         }

运行结果为:

 

转载请注明原文地址: https://www.6miu.com/read-97315.html

最新回复(0)