dllbridge

Untitled

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