Advertisement
Domerk

Сортировка_Дима

Dec 11th, 2013
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.15 KB | None | 0 0
  1. // Сортировка по убыванию методом выбора минимума.
  2.     // Язык реализации - С++
  3.      
  4.     #include <iostream>
  5.      
  6.     #define PARAMETER 50 //константа
  7.      
  8.     using namespace std;
  9.      
  10.     //создаём структуру "Массив"
  11.     //для объявления массива это вовсе не обязательно
  12.     //но всё равно делаем так
  13.     struct Arreys
  14.     {
  15.             int Matr [PARAMETER] [PARAMETER]; //массив
  16.             int n; //число используемых строк и столбцов
  17.     };
  18.      
  19.     // объявляем функции, которые будем использовать
  20.     struct Arreys Create (struct Arreys My_Matr);
  21.     void Browse (struct Arreys My_Matr);
  22.     struct Arreys Nulling (struct Arreys My_Matr);
  23.     struct Arreys Sorting (struct Arreys My_Matr);
  24.      
  25.     /*============================================*/
  26.     /*============тело главной функции============*/
  27.     /*============================================*/
  28.     int main ()
  29.     {
  30.             struct Arreys My_Matr; //создаём экземпляр структуры "Массив"
  31.             cout<<"  Select 1/2 the width of the square: ";
  32.             cin>>My_Matr.n; //находим n
  33.             cout<<endl;
  34.      
  35.             My_Matr=Create(My_Matr); //заполняем
  36.             cout<<"  Array:"<<endl;
  37.             Browse(My_Matr); //выводим на экран
  38.      
  39.             My_Matr=Sorting(My_Matr); //сортируем
  40.             cout<<"  Sorting:"<<endl;
  41.             Browse(My_Matr); //выводим на экран
  42.            
  43.             My_Matr=Nulling(My_Matr); //обнуляем
  44.             cout<<"  Nulling:"<<endl;
  45.             Browse(My_Matr); //выводим на экран
  46.      
  47.             cin.sync(); //удерживаем экран до нажатия клавиши
  48.             cin.get();
  49.             return 0;
  50.     }
  51.     /*============================================*/
  52.     // функция заполнения массива
  53.     // принимает экзмепляр стуктуры "Массив"
  54.     struct Arreys Create (struct Arreys My_Matr)
  55.     {
  56.             int i, j; //переменные счётчика
  57.             for (i=0; i<(2*My_Matr.n); i++) //до последней строки
  58.             {
  59.                     for (j=0; j<(2*My_Matr.n); j++) //до последнего столбца
  60.                             My_Matr.Matr[i][j]=j+1; //заносим в ячейку номер столбца
  61.             }
  62.             return My_Matr; //возвращаем массив
  63.     }
  64.     /*============================================*/
  65.     // функция просмотра массива
  66.     void Browse (struct Arreys My_Matr)
  67.     {
  68.             int i, j; //переменные
  69.             cout<<endl;
  70.             for (i=0; i<(2*My_Matr.n); i++) //по строкам
  71.             {
  72.                     cout<<"  ";
  73.                     for (j=0; j<(2*My_Matr.n); j++) //по столбцам
  74.                     {
  75.                             cout<<My_Matr.Matr[i][j]<<" "; //выводим инфу на экран
  76.                     }
  77.                     cout<<endl;
  78.             }
  79.             cout<<endl;
  80.     }
  81.      
  82.     /*============================================*/
  83.     // функция обнуления массива
  84.     struct Arreys Nulling (struct Arreys My_Matr)
  85.     {
  86.         int i, j, k, z; //переменные
  87.  
  88.         //обнуление верхней половины матрицы
  89.         for (i=0, j=My_Matr.n-1, k=My_Matr.n; i<My_Matr.n, j>=0, k<2*My_Matr.n; i++, j--, k++)
  90.         {
  91.             for (z=j; z<=k; z++)
  92.             {
  93.                 My_Matr.Matr[i][z]=0;
  94.             }
  95.         }
  96.  
  97.         // обнуление нижней части
  98.         for (i=My_Matr.n, j=0, k=2*My_Matr.n-1; i<2*My_Matr.n, j<My_Matr.n, k>=My_Matr.n; i++, j++, k--)
  99.         {
  100.             for (z=j; z<=k; z++)
  101.             {
  102.                 My_Matr.Matr[i][z]=0;
  103.             }
  104.         }
  105.  
  106.         return My_Matr; //возвращаем массив
  107.     }
  108.      
  109.      
  110.     /*============================================*/
  111.     // функция сортировки массива
  112.     struct Arreys Sorting (struct Arreys My_Matr)
  113.     {
  114.         int beginning, ending, i, j, k, Min, jMin;
  115.         // beginning - начало, откуда сортируем
  116.         // ending - конец, до чего сортируем
  117.         // i, j, k - переменные
  118.         // Min, jMin - минимум и номер его столбца
  119.  
  120.  
  121.         // сортировка левой верхней части
  122.         for (i=0, ending = My_Matr.n-2; i<My_Matr.n, ending>0 ; i++, ending--) //идём по строкам, конец сдвигается
  123.         {
  124.             for (k=ending; k>0; k--) //докуда ищем миниммум
  125.             {
  126.                 jMin=0;
  127.                 Min=My_Matr.Matr[i][0]; //считаем минимумом первый элеммент
  128.                 for (j=0; j<=k; j++) // идём по столбцам
  129.                 {
  130.                     if (My_Matr.Matr[i][j]<=Min) // сравниваем всё с текущим минимумом
  131.                     {
  132.                         Min=My_Matr.Matr[i][j]; // если находим новый минимум - сохраняем
  133.                         jMin=j; // сохраняем номер стобца
  134.                     }
  135.                 }
  136.                 My_Matr.Matr[i][jMin]=My_Matr.Matr[i][k]; //меняем местами последний элемент
  137.                 My_Matr.Matr[i][k]=Min;            // и минимум
  138.             }
  139.         }
  140.  
  141.         // сортировка правой верхней части
  142.         ending=2*My_Matr.n-1; // это конец
  143.         for (i=0, beginning=My_Matr.n+1; i<My_Matr.n, beginning<2*My_Matr.n; i++, beginning++) // меняются строка и место начала
  144.         {
  145.             for (k=ending; k>=beginning; k--) // докуда ишем минимум
  146.             {
  147.                 jMin=0;  // далее всё то же самое
  148.                 Min=My_Matr.Matr[i][beginning];
  149.                 for (j=beginning; j<=k; j++)
  150.                 {
  151.                     if (My_Matr.Matr[i][j]<=Min)
  152.                     {
  153.                         Min=My_Matr.Matr[i][j];
  154.                         jMin=j;
  155.                     }
  156.                 }
  157.                 My_Matr.Matr[i][jMin]=My_Matr.Matr[i][k];
  158.                 My_Matr.Matr[i][k]=Min;
  159.             }
  160.         }
  161.  
  162.         // сортировка левой нижней части
  163.  
  164.         for (i = My_Matr.n+2, ending = 1; i<2*My_Matr.n, ending<2*My_Matr.n-1; i++, ending++)
  165.         {
  166.             for (k=ending; k>0; k--)
  167.             {
  168.                 jMin=0;
  169.                 Min=My_Matr.Matr[i][0];
  170.                 for (j=0; j<=k; j++)
  171.                 {
  172.                     if (My_Matr.Matr[i][j]<=Min)
  173.                     {
  174.                         Min=My_Matr.Matr[i][j];
  175.                         jMin=j;
  176.                     }
  177.                 }
  178.                 My_Matr.Matr[i][jMin]=My_Matr.Matr[i][k];
  179.                 My_Matr.Matr[i][k]=Min;
  180.             }
  181.         }
  182.  
  183.         // сортировка правой нижней части
  184.         ending=2*My_Matr.n-1;
  185.         for (i=My_Matr.n+2, beginning=2*My_Matr.n-2; i<2*My_Matr.n, beginning>My_Matr.n; i++, beginning--)
  186.         {
  187.             for (k=ending; k>=beginning; k--)
  188.             {
  189.                 jMin=0;
  190.                 Min=My_Matr.Matr[i][beginning];
  191.                 for (j=beginning; j<=k; j++)
  192.                 {
  193.                     if (My_Matr.Matr[i][j]<=Min)
  194.                     {
  195.                         Min=My_Matr.Matr[i][j];
  196.                         jMin=j;
  197.                     }
  198.                 }
  199.                 My_Matr.Matr[i][jMin]=My_Matr.Matr[i][k];
  200.                 My_Matr.Matr[i][k]=Min;
  201.             }
  202.         }
  203.  
  204.      
  205.             return My_Matr; //возвращаем то, что получилось
  206.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement