Я застреваю во второй части этой миссии. Я думаю, что у меня проблема с моим алгоритмом. Сообщите мне, пожалуйста, если мой код находится в хорошем направлении. Это мой mession Учитывая множество двумерных целых чисел. Массив состоит из 5 строк и 10 столбцов. Каждое значение в системе представляет собой случайное число между 0 и 20. Необходимо написать программу, которая выполняет сортировку значений массива следующим образом: сначала располагайте значения в каждом столбце, чтобы они сортировались в порядке возрастания (сверху вниз), тогда - так что сортировка столбцов вправо «подходит» путем сравнения пар значений в разных столбцах одной и той же строки («сравнительная лексикография»): сравнение двух значений в двух столбцах в первой строке, если они совпадают по сравнению со значениями во второй строке и т. д. и соответственно изменяют порядок столбцов (см. пример в третьей печати массива ниже). Чтобы отобразить массив перед сортировкой и после каждой из двух фаз чрезвычайной ситуации. например: Сортировка столбцов (сравнительная лексикография) в матрице | C
#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);
void SortColumns(int arr[][M]);
int compareColumns(int arr[][M], int col1, int col2);
void swapColumns(int col1, int col2);
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);
printf("Sorting columns:\n");
SortColumns(arr);
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,k;
int temp;
for(k=0 ; k<m ; ++k) // loops around each columns
{
for(j=0; j<N-1; j++)// Loop for making sure we compare each column N-1 times since for each run we get one item in the right place
{
for(i=0; i < N-1 - j; i++) //loop do the adjacent comparison
{
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;
}
}
}
}
printArray(arr);
}
void SortColumns(int arr[][M])
{ int row=0,cols=0,i=0,n=N;
int col1=arr[row][cols];
int col2=arr[row][cols];
compareColumns(arr,col1,col2);
}
int compareColumns(int arr[][M], int col1, int col2)
{
int row=0,cols=0,j;
for (row=0 ; row < N ; row ++);
{
for(cols=0 ; cols < M-1 ; cols++)
{
if(arr[row][cols]>arr[row][cols+1])
{
for (j=0 ; j < M-1 ; j++)
{
col1=arr[row][cols];
col2=arr[row][cols+1];
swapColumns(col1 , col2);
}
}
}
}
printArray(arr);
}
void swapColumns(int col1, int col2)
{
int temp;
temp=col1;
col1=col2;
col2=temp;
}
Кстати является сложность функции compareColumns (п^3)?
Hey Filipe Я отредактировал мое сообщение. Я отправил всю программу кода. Во-первых, правильно ли работает мой код? Я хотел бы получить помощь, чтобы исправить это, чтобы отсортировать cols! Мне понравилась ваша вторая сортировка, которую вы покупаете. Я постараюсь написать код, и я надеюсь, что это поможет мне исправить это! –
SortInColumn() выглядит нормально для меня. Почему вы использовали сортировку пузырьков, ваш ввод, как ожидается, будет уже отсортирован много раз? (это единственная ситуация, когда пузырьковая сортировка может быть лучше). compareColumns() вызывается с аргументами, которые бесполезны. col1 и col2 назначаются только, они могут быть локальными переменными. Кроме того, метод неверен: после замены двух столбцов вы должны прекратить их сравнивать; ваш код действует так, как будто вы никогда не меняли местами и продолжали сравнивать дальнейшие позиции. Кроме того, вы никогда не используете j во внутреннем цикле, и swap не меняет их, поскольку параметры передаются копией. –
Можете ли вы исправить мой код, пожалуйста, я действительно не знаю, как это сделать. Я бы \t оцените –