Перестановка столбцов матрицы по условию

Дана матрица M*N переставить столбцы матрицы по неубыванию значений элементов наименьших столбцов матрицы.

Алгоритм:
1)генерируем матрицу(a)
2)печатаем ее
3)одномерному массиву(b) присваеваем первые элементы каждого столбца чтобы потом найти наименьшие
4)идем по столбцам матрицы(a), и сравниваем ее элементы с элементами массива(b), если
элемент в столбце матрицы(a) меньше элемента в массиве (b), то в массив (b) вносим элемент матрицы(а)
сортируем массив(b), сортируем столбцы матрицы(a). И так до тех пор пока не отсортируем матрицу(а)
по неубыванию значений элементов наименьших столбцов.
5)печатаем новую, отсортированную матрицу.

//подключаем библиотеки
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define M 5  //количество элементов в столбце
#define N 5  //количество элементов в строке
int a[M][N];  //главная матрица
int b[N];  //массив для хранения наименьших чисел каждого столбца
int i, j, k;  //переменные для операторов циклов
int tmp;  //временная переменная для хранения элементов столбцов главной матрицы
 
main() //главная функция
{
   clrscr();  //очистка экрана
 
   randomize();  //функция генерации чисел
 
   //генерируем главную матрицу
   for(i = 0; i < M; i++)
     for(j = 0; j < N; j++)
       a[i][j] = random(10);
 
   //печатаем главную матрицу
   printf("\n\nOld Values: ");
   for(i = 0; i < M; i++)
   {
     printf("\n");
 
     for(j = 0; j < N; j++)
       printf("%3d", a[i][j]);
   }
 
   /*присваем массиву b первые элементы каждого столбца
   чтобы потом выбрать меньший*/
   for(i = 0; i < N; i++)
     b[i] = a[0][i];
 
   //в массив b вносим наименьшие элементы каждого столбца
   for(j = 0; j < N; j++) {
     for(i = 0; i < M; i++)
       if(a[i][j] < b[j])
         b[j] = a[i][j];
   }
 
   for(i = 0; i < N - 1; i++) {
     for(j = i + 1; j < N; j++) {
       if(b[j] < b[i]) {  //сортируем массив b по возрастанию
         int tmp = b[i];
         b[i] = b[j];
         b[j] = tmp;
 
         for(k = 0; k < M; k++) {  //меняем местами столбцы матрицы
           tmp = a[k][j];
           a[k][j] = a[k][i];
           a[k][i] = tmp;
         }//for
       }//if
     }//for
   }//for                           
 
   /*печатаем главную матрицу со столбцами выставленными по возрастанию
   наименьших их элементов*/
   printf("\n\nNew Values: ");
   for(i = 0; i < M; i++)
   {
     printf("\n");
 
     for(j = 0; j < N; j++)
       printf("%3d", a[i][j]);
   }
 
   getch();  //ожидаем нажатия клавиши 
}

Ключевые слова: 
матрицы, сортировка, столбцы, перестановка
ВложениеРазмер
массивов.rar29.03 кб