Дана матрица Х(10х10). Найти в каждой строке матрицы минимальный элемент и упорядочить строки по возрастанию этих элементов
Есть такая задача. Нашёл решение, где по возрастанию сортируется только первая строка. Подогнал свою задачу под него, но, моих знаний к сожалению не хватает, что бы заставить идти по возрастанию все строки. Помогите пожалуйста.
#include <stdio.h>
#define N 10
#define M 10
main() {
int x[N][M], i, j, k, id, max;
srand(time(NULL));
for (i=0; i<N; i++) {
for (j=0; j<M; j++) {
x[i][j] = rand()%50 - 25;
printf("%4d", x[i][j]);
}
printf("\n");
}
printf("\n");
k = M-1;
while (k > 0) {
id = 0;
for (j=1; j<=k; j++)
if (x[0][j] > x[0][id])
id = j;
for (i=0; i<N; i++) {
max = x[i][id];
x[i][id] = x[i][k];
x[i][k] = max;
}
k -= 1;
}
for (i=0; i<N; i++) {
for (j=0; j<M; j++) {
printf("%4d", x[i][j]);
}
printf("\n");
}
}
Ответы (1 шт):
Автор решения: DSuhoi
→ Ссылка
С помощью стандартной функции qsort() можно сортировать массивы быстро и удобно,т.к. требуется лишь создание функции для сравнения элементов массива comp(a,b). Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10 //квадратная матрица
int comp (const void * a, const void * b) //для qsort сравнения
{
int _a = *((int*)a);
int _b = *((int*)b);
if (_a > _b) return 1;
if (_a < _b) return -1;
return 0;
}
int main(void) {
int x[N][N];
srand(time(NULL));
for (int i=0; i<N; i++) {
for (int j=0; j<N; j++) {
x[i][j] = rand()%50 - 25;
printf("%4d", x[i][j]);
}
printf("\n");
}
printf("\n");
for(int i=0; i<N; i++)
qsort(x[i], sizeof(*x)/sizeof(**x), sizeof(**x), comp); //не буду изобретать велосипед
for (int i=0; i<N; i++) {
for (int j=0; j<N; j++) {
printf("%4d", x[i][j]);
}
printf("\n");
}
return 0;
}
