gpt4 book ai didi

c - 在 C 中对二维矩阵列和行进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 05:00:13 24 4
gpt4 key购买 nike

给定一组二维整数。该数组由 5 行和 10 列组成。系统中的每个值都是 0 到 20 之间的随机数。必须编写一个程序来执行数组值的排序,如下所示:首先排列每列中的值,以便它们按升序排序(从上到下),然后 - 因此可以通过比较同一行中不同列中的值对来对列进行“正确”排序(“comparison lexicography"):比较第一行两列的两个值,如果与第二行的值比较相同,以此类推,并相应地改变列的顺序(见第三次打印中的例子数组,如下)。显示数组排序前和排序后的两个阶段中的每一个。例如 : example and output of my code我坚持对每个列进行排序。我没有得到我想要的排序。我想得到你的帮助。这是我的代码:

#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");
}
}

最佳答案

这是我的,它运行并给出了正确答案。

基本上,您做错了两件事。

  • 你需要三个循环而不是两个。外循环环绕每一列。第二个循环确保你比较每一列 N-1 次,因为每次运行你都会在正确的位置得到一个项目。内循环做相邻比较。

  • 您需要将arr[i][k]arr[i][k+1] 之间的比较更改为arr[ i][k]arr[i+1][k]。因为您想在同一列中比较它们,所以保持值 k(列)不变并更改行 i

    void SortInColumn(int arr[][M],int m)
    {
    int i,j,k;
    int temp;

    for( k=0 ; k<m ; ++k)
    {
    for(j=0; j<N-1; j++)
    {
    for(i=0; i < N-1 - j; i++)
    {
    if (arr[i][k]>arr[i+1][k]) // compare adjacent item
    {
    temp=arr[i][k];
    arr[i][k]=arr[i+1][k];
    arr[i+1][k]=temp;
    }
    }
    }
    }
    }

顺便说一句,这个算法总体来说性能很差。您可能想尝试其他方法。

关于c - 在 C 中对二维矩阵列和行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18874712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com