如何对多维数组进行排序

 我来答
韩念先生范详
2017-08-08 · 超过22用户采纳过TA的回答
知道答主
回答量:79
采纳率:0%
帮助的人:16.3万
展开全部

在C语言中,二维数组按行存储,对每一行排序很方便,可以把每一行当成一个一维数组,使用排序函数直接进行排序。
然而对每一列进行排序,就不能直接当成一维数组进行排序。但是仍然可以把第j列a[0...M-1][j]在逻辑上当成一维数组进行排序,下面以使用冒泡排序为例对其排序。
对二维数组按列排序后,进一步展示了如何调用快速排序函数按行进行排序。
程序源码:

#include <stdio.h>
#include <stdlib.h>


#define M 3
#define N 3

//输出二维数组的函数
void print(int a[][N])
{
  胡弊皮 int i,j;
   for(i=0;i<M;i++)
   {
      for(j=0;j<N;j++)
      {
         printf("%d ",a[i][j]);
      }
      printf("\n");
   } 
}

//qsort的cmp函数
int cmp(const void*a, const void *b)
{
     return *(int*)a-*(int*)b;
}

int main(int argc, char* argv)
{

    int a[M][N]={3,2,1,9,8,7,6,5,4};
    
    printf("按列排序前的二维数组是:\n");
    print(a);
    printf("\n");
    int j;
    for(j=0;j<N;j++)//对每一列进行升序排序 
    {
       //对第j列进行排序 
       int m,n;
       int t;
       for(m=M-1;m>0;m--)
       {
            for(n=0;n<m;n++)
            {
                  if(a[n][j]>a[n+1][j])
                  {
            裤差          t=a[n][j];
                      a[n][j]=a[n+1][j];
                      a[n+1][j]=t;
                  }
            } 
       } 
    } 
    printf("按列排序后二维数组变为:\n");
   卜桐 print(a);
    printf("\n"); 
    
    //对按列排序后的二维数组按行升序排序 (调用快速排序函数) 
    
    int i;
    for(i=0;i<M;i++)
    {
        qsort(a[i],N,sizeof(a[i][0]),cmp);
    } 
    
    printf("按列排序后再按行排序后二维数组变为:\n");
    print(a);
    printf("\n");
    system("pause");
    return 0;
}

编译运行后的结果如下:


程序源码和编译后的可执行程序已经打包放在附件里,可以直接下载运行。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式