我想按行和列方式对二维数组进行排序。我可以按顺序对它进行排序,但是我无法按列方式进行排序。我正在尝试使用以下代码:
#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]
请帮我纠正这段代码。
答案 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();
}
}
}