Отсортировать все столбцы матрицы методом выбора - C (СИ)
Формулировка задачи:
Задание: Имеется двумерный массив случайных чисел размерностью NxN, где N = 9. Отсортировать все
столбцы методом выбора так, чтобы элементы в них располагались по
возрастанию.
Проблема: Не могу сделать чтоб сортировались именно столбы. Кому не трудно, прошу помочь.
Вот заготовка программы с формированием массива случайных чисел и выводом несортированного и сортированного массивов.
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define N 9
int main()
{
int i, j, rnd, r_min=0, r_max=50;
int array[N][N];
srand((unsigned)time(NULL));
printf("Unsorted array:\n");
for(i=0; i<N; i++) //формирование массива из случайных чисел
{
for(j=0; j<N; j++)
{
rnd=(((double)rand()/(double)RAND_MAX)*(r_max-r_min)+r_min);
array[i][j]=rnd;
printf("%d\t",array[i][j]);
}
printf("\n");
}
printf("\nSorted array:\n");
for(i=0; i<N; i++) // вывод преобразованного массива на экран
{
for(j=0; j<N; j++ )
{
printf("%d\t",array[i][j]);
}
printf("\n");
}
}Решение задачи: «Отсортировать все столбцы матрицы методом выбора»
textual
Листинг программы
int min, mini, k;
for(j=0; j<N; j++)
for(i=0; i<N; i++)
{
min = array[i][j];
mini = i;
for(k=i+1; k<N; k++)
if (min>array[k][j]) {min = array[k][j]; mini = k;}
array[mini][j] = array[i][j];
array[i][j] = min;
}
Объяснение кода листинга программы
В этом коде выполняется сортировка всех столбцов матрицы методом выбора.
- В первой строке объявляются три переменные: — min — для хранения минимального элемента в текущем столбце; — mini — для хранения индекса строки, содержащей минимальный элемент; — k — для использования в цикле.
- В следующей строке два вложенных цикла организовывают перебор всех элементов матрицы: — внешний цикл по строкам матрицы (j); — внутренний цикл по столбцам матрицы (i).
- Внутри вложенных циклов: — min присваивается значение текущего элемента матрицы; — mini присваивается значение i; — k инициализируется значением i+1 и используется для проверки всех последующих элементов в текущем столбце.
- Если найден элемент, меньший min, то он становится новым min, а его индекс — новым mini.
- Затем выполняется обмен элементов: — элемент с индексом mini в текущем столбце заменяется на элемент с индексом i; — элемент с индексом i в текущем столбце заменяется на min. После завершения циклов, матрица будет отсортирована по столбцам.