如何按行排列2D数组?

时间:2015-10-11 09:35:05

标签: c arrays sorting multidimensional-array

我想按行和列方式对二维数组进行排序。我可以按顺序对它进行排序,但是我无法按列方式进行排序。我正在尝试使用以下代码:

#include<stdio.h>
void sort_rows(int *arr,int n)
{
    int i;
    for(i=1;i<n;i++)
    {
       int key=arr[i];
       int j=i-1;
       while(j>=0 && key<arr[j])
       {
           arr[j+1]=arr[j];
           j--;
       }
        arr[j+1]=key;
    }
}
void sort_column(int arr[][3],int size)
{
    int i,j;
    int key,k;
    for(i=0;i<size;i++)
    {
        for(j=1;j<size;j++)
        {
            key=arr[j][i];
            k=j-1;
            while(k>=0 && arr[k][i]>key)
            {
                arr[k+1][i]=arr[k][i];
                k--;
            }
            arr[k+1][i]=key;
        }
    }
}
int main()
{
    int arr[][3]={{9,8,7},{6,5,4},{3,2,1}};
    int i,j,size;
    size=((sizeof(arr)/sizeof(arr[0][0])/(sizeof(arr[0])/sizeof(arr[0][0])))); //calculates the size of each row.
    for(i=0;i<size;i++)
    {
        sort_rows(arr[i],sizeof(arr[i])/sizeof(arr[i][0]));
    }
    size=sizeof(arr)/sizeof(arr[0]); //calculates the size of each column.
    for(i=0;i<size;i++)
    {
        sort_column(arr[i][size],size);
    }
    return 0;
}

我使用选择排序来对行和列进行排序。我知道我对列进行排序的方法是错误的。我的代码中出现此错误:passing argument 1 of 'sort_column' makes pointer from integer without a cast [enabled by default] 请帮我纠正这段代码。

3 个答案:

答案 0 :(得分:3)

编译器给你的错误告诉你究竟是什么问题。当您调用sort_column(arr[i][size], size)时,arr[i][size]计算为int。但是,正如您所定义的那样,sort_column()的第一个参数是一个2D数组。因此,类型不匹配。

答案 1 :(得分:0)

调用表达式sort_column(arr[i][size],size);中有一个错误,它调用sort_column按列排序。正确的表达式是sort_column(arr,size);。请查看此链接以获取完整代码:http://ideone.com/iLeFfr

答案 2 :(得分:-3)

import java.util.*;

public sort 
{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        int m=sc.nextInt();
        int a[][]=new int[n][m];enter code here
        for(int i=0;i<=n-1;i++)
        {
            for(int j=0;j<=m-1;j++)
            {
                a[i][j]=sc.nextInt();//TAKE INPUT
            }
        }
        for(int i=0;i<=n-1;i++)
        {
             Arrays.sort(a[i]);//  SORT RAW-WISE
        }

        for(int i=0;i<=n-1;i++)
        {
            for(int j=0;j<=i;j++)
            {
                int t=a[i][j];
                a[i][j]=a[j][i];
                a[j][i]=t;
            }
        }                     //TRANSPOSE IT SO RAW BECOMES COLOUM AND VISE A VERSA

        for(int i=0;i<=n-1;i++)
        {
             Arrays.sort(a[i]);//  SORT RAW-WISE(COLOUM)
        }

        for(int i=0;i<=n-1;i++)
        {
            for(int j=0;j<=i;j++)
            {
                int t=a[i][j];
                a[i][j]=a[j][i];
                a[j][i]=t;
            }
       }                    // FOR OBTANING ORIGINAL ONE

        for(int i=0;i<=n-1;i++)
        {
            for(int j=0;j<=m-1;j++)
            {
                System.out.print(a[i][j]+" ");
            }
          System.out.println();
       }
    }
}