Advertisement
AskTomorrow

Untitled

Feb 14th, 2020
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. int partition(Student *students, Ski *skis, int leftBorder, int rightBorder)
  2. {
  3.     //
  4.     Student pivot = students[(leftBorder + rightBorder) / 2];
  5.     Ski pivotSkis;
  6.  
  7.     for (int i = 0; i < sizeof(students); ++i)
  8.     {
  9.         if (compare(pivot, skis[i]) == 0) {
  10.             pivotSkis = skis[i];
  11.             break;
  12.         }
  13.     }
  14.  
  15.     int idSkis1 = leftBorder;
  16.     int idSkis2 = rightBorder;
  17.  
  18.     while (idSkis1 <= idSkis2)
  19.     {
  20.         while (compare(pivot, skis[idSkis1]) == -1)
  21.         {
  22.             idSkis1++;
  23.         }
  24.  
  25.         while (compare(pivot, skis[idSkis2]) == 1)
  26.         {
  27.             idSkis2--;
  28.         }
  29.  
  30.         if (idSkis1 >= idSkis2)
  31.         {
  32.             break;
  33.         }
  34.  
  35.         swap(skis[idSkis1++], skis[idSkis2--]);
  36.     }
  37.  
  38.     int idStudents1 = leftBorder;
  39.     int idStudents2 = rightBorder;
  40.  
  41.     while (idStudents1 <= idStudents2)
  42.     {
  43.         while (compare(students[idStudents1], pivotSkis) == -1)
  44.         {
  45.             idStudents1++;
  46.         }
  47.  
  48.         while (compare(students[idStudents2], pivotSkis) == 1)
  49.         {
  50.             idStudents2--;
  51.         }
  52.  
  53.         if (idStudents1 >= idStudents2)
  54.         {
  55.             break;
  56.         }
  57.  
  58.         swap(students[idStudents1++], students[idStudents2--]);
  59.     }
  60.  
  61.  
  62.     return idStudents2;
  63. }
  64.  
  65.  
  66. /*
  67.  * Если возможно, разделяю массив соответствующим методом, и рекурсивно вызываю текущий метод
  68.  * для двух его частей
  69.  */
  70. void quickSortWithBorders(Student *students, Ski *skis, int leftBorder, int rightBorder)
  71. {
  72.     if (leftBorder < rightBorder)
  73.     {
  74.         int middle = partition(students, skis, leftBorder, rightBorder);
  75.         quickSortWithBorders(students, skis, leftBorder, middle);
  76.         quickSortWithBorders(students, skis, middle + 1, rightBorder);
  77.     }
  78.     else
  79.     {
  80.         return;
  81.     }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement