给定集合二维整数。该数组由 5 行和 10 列组成。系统中的每个值都是 0 到 20 之间的随机数。必须编写一个程序来执行数组值的排序,如下所示:首先将每列中的值排列,以便它们按升序排序(从上到下) ),然后 - 因此可以通过比较同一行中不同列中的值对(“比较词典”)对“正确”的列进行排序:比较第一行中两列中的两个值,如果它们与第二行中的值相比是相同的,依此类推,并相应地更改列的顺序(参见下面数组第三次打印中的示例)。在紧急情况的两个阶段中的每个阶段之前和之后显示数组。例如 : 我坚持对每个列进行排序。我没有得到我想要的排序。我想得到你的帮助。这是我的代码:
#include "stdio.h"
#include "conio.h"
#include "malloc.h"
#include "stdlib.h"
#define N 5
#define M 10
#define LOW 0
#define HIGH 20
void initRandomArray(int arr[N][M]);
void printArray(int arr[N][M]);
void SortInColumn(int arr[N][M],int m);
int main()
{
int arr[N][M];
int m;
m=M;
srand((unsigned)time(NULL)); //To clear the stack of Random Number
initRandomArray(arr);
printf("Before sorting:\n");
printArray(arr);
printf("Sorting elements in each column:\n");
SortInColumn(arr,M);
system("pause");
return 0;
}
void initRandomArray(int arr[N][M])
{
int i,j;
for (i=0 ; i<N ; i++)
for (j=0 ; j<M ; j++)
{
arr[i][j]=LOW+rand()%(HIGH-LOW+1);
}
}
void printArray(int arr[N][M])
{
int i,j;
for (i=0 ; i<N ; i++)
{
for (j=0 ; j<M ; j++)
printf("%d ", arr[i][j]);
printf("\n");
}
}
void SortInColumn(int arr[][M],int m)
{
int i,j;
int temp;
for( i=m-1 ; i>=0 ; i--)
{
for(j=0; j<N-1; j++)
if (arr[i][j]>arr[i][j+1]) // compare adjacent item
{
temp=arr[i][j];
arr[i][j]=arr[i][j+1];
arr[i][j+1]=temp;
}
}
for (i=0 ; i<N ; i++)
{
for (j=0 ; j<M ; j++)
printf("%d ", arr[i][j]);
printf("\n");
}
}