Advertisement
dllbridge

Untitled

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