Advertisement
dllbridge

Untitled

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