Advertisement
dllbridge

Untitled

Feb 21st, 2023
904
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.91 KB | None | 0 0
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13. #include   <stdio.h>
  14.  
  15. int arr[99] =  { 17, 5, 0, 777, 11, -2, 198, -3, 7, 3 };        //  Этот массив требуется сортировать по возрастанию
  16.  
  17. int       length = 10,                                                                //  Кол-во элементов в массиве
  18.      swap_counter = 0;                            //                    Суммарное число перестановок, при сортировке    
  19.  
  20. void bubble_sorting(int *a, int size);            //                                            Сортировка пузырьком
  21. void   comb_sorting(int *a, int size);
  22. void           show(int *a, int size);            //                             Показать на экране элементы массива
  23. void           swap(int &a, int   &b);            //                       Меняет местами содержимое двух переменных
  24. int   chek_res_sort(int *a, int size);            //      Возвращает TRUE, если отсортировано верно. FALSE, если нет.
  25.  
  26. void       _sorting(int *a, int size);
  27.  
  28.  
  29. //                           Точка входа в программу
  30. ////////////////////////////////////////////////////
  31. int main()                                        //
  32. {
  33.    
  34.     show(arr, length);
  35.    
  36.   //comb_sorting(arr, length);
  37.  // bubble_sorting(arr, length);
  38.    _sorting(arr, length);
  39.     printf("- - - - - - - - - - - - - - - - - - - - - - -   \n");
  40.     printf("In the sorting process, it took %d permutations.\n", swap_counter);
  41.     if(chek_res_sort(arr, length) ) printf("Checked. The numbers are strictly ascending."      );
  42.     else                            printf("Mistake! The values in the array are out of order.");
  43.    
  44. return 0;  
  45. }
  46.  
  47. // Nastya  
  48. ////////////////////////////////////////////////////////////
  49. void _sorting(int *arr, int size)      
  50. {
  51.     int step = size - 1,
  52.         tmp;    
  53.    
  54.     while(step > 0)
  55.     {
  56.         for(int i = 0; i + step < size; i++)
  57.         {
  58.             if (arr[i] > arr[i+step])
  59.             {
  60.                 tmp         = arr[i];
  61.                 arr[i]      = arr[i+step];
  62.                 arr[i+step] = tmp;
  63.             }
  64.         }
  65.         step = step / 1.2473309;
  66.     }
  67.    
  68.     for(int j = 0; j < size; j++)
  69.     {
  70.         printf("arr[%d] = %4d\n", j, arr[j]);
  71.     }
  72. }  
  73.  
  74. //                              Сортировка "Расчёска"
  75. /////////////////////////////////////////////////////                                            
  76. void comb_sorting(int *a,                          //                                Передаёте адрес элемента массива,
  77.                                                    //              с которого начинаете упорядочивание по возрастанию.
  78.                   int size)                        //       И передаёте кол-во элементов, которые будут отсортированы.
  79. {
  80.  
  81.      int step = size - 1;
  82.  
  83.      while(step >= 1)
  84.      {
  85.            
  86.          for(int i = 0; i + step < size; i++)      
  87.          {
  88.                    
  89.              if(a[i] > a[i+step])  
  90.              {
  91.                 swap(a[i], a[i+step]);
  92.                 show( arr, length);                 //                                       Эта строка необязательна    
  93.              }                                      //                         Нужна для отслеживания хода сортировки
  94.          }  
  95.          
  96.          step /= 1.2473309;
  97.      }      
  98. }
  99.  
  100.  
  101. //                               Сортировка пузырьком
  102. /////////////////////////////////////////////////////                                            
  103. void bubble_sorting(int *a,                        //                                Передаёте адрес элемента массива,
  104.                                                    //              с которого начинаете упорядочивание по возрастанию.
  105.                     int size)                      //       И передаёте кол-во элементов, которые будут отсортированы.                                                    
  106. {  
  107.        
  108.      int    i,                //  Счётчик в цикле  //
  109.          Flag;              //  флаг перестановки  //
  110.    
  111.      do { Flag = 0;
  112.          
  113.           for(i = 0; i < size - 1; i++)
  114.           {
  115.              if(a[i] > a[i+1])
  116.              {
  117.                 swap(a[i], a[i+1]);
  118.              
  119.                 show(arr, length);                 //                                       Эта строка необязательна
  120.                                                    //                         Нужна для отслеживания хода сортировки  
  121.                 Flag = 1;                          //                     Была перестановка. Значит цикл продолжится  
  122.              }
  123.           }        
  124.           printf("\n");
  125.          
  126.      } while(Flag == 1);                           //                          Если (Flag == 1), то цикл повторяется
  127. }
  128.  
  129. //                Показать на экране элементы массива
  130. /////////////////////////////////////////////////////                            
  131. void show(int *a, int size)                        //
  132. {
  133.      int i = 0;
  134.    
  135.      for(; i < size; i++) printf("%2d, ", a[i]);
  136.      
  137.      printf("\n");
  138. }
  139.  
  140.  
  141. //           Меняет местами содержимое двух переменных
  142. //////////////////////////////////////////////////////                      
  143. void swap(int &a, int &b)                           //
  144. {
  145.    
  146.      int buf = a;
  147.      a = b;
  148.      b = buf;
  149.      
  150.      swap_counter ++;                               //                                    Ещё одна (+1) перестановка
  151. }
  152.  
  153.  
  154.  
  155. //            Проверка правильности сортировки массива
  156. //////////////////////////////////////////////////////
  157. int chek_res_sort(int *a,                           //                                        Передаёте адрес массива,
  158.                                                     //                          который был упорядочен по возрастанию.
  159.                   int size)                         //          И передаёте кол-во элементов, которые нужно проверить.
  160. {
  161.    
  162.     for(int i = 0; i < size - 1; i++)
  163.     {
  164.            
  165.         if(a[i] > a[i+1]) return 0;          
  166.     }
  167.    
  168. return 1;  
  169. }
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement