dllbridge

Untitled

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