Advertisement
Kordan

Сортировка массива по возрастанию методом Хоара

Feb 3rd, 2018
585
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.91 KB | None | 0 0
  1. /*
  2. * Kordan C++ ************************************************************
  3. * Программа заполнения массива определенного размера случайными числами *
  4. *  и его сортировка по возрастанию методом Хоара                        *
  5. * ***********************************************************************
  6. */
  7. #include <iostream>
  8. #include <cstdlib> // содержит srand() и rand()
  9. #include <ctime>   // содержит time()
  10. using namespace std;
  11.  
  12. int FillArray (int *arr, const int size, const int min_range, const int max_range);
  13. void quickSort (int *arr, int begin, int end);
  14. void print (int *arr, int size);
  15.  
  16. int main () {
  17.     setlocale (LC_ALL, "RUS");
  18.     // Количество чисел в массиве
  19.     const int SIZE = 13;
  20.     // Минимальное число в массиве
  21.     const int MIN_RANGE = 13;
  22.     // Максимальное число в массиве
  23.     const int MAX_RANGE = 81;
  24.  
  25.     int list[SIZE];
  26.  
  27.     if (FillArray (list, SIZE, MIN_RANGE, MAX_RANGE) != 1) {
  28.         // Выводим значения исходного массива
  29.         print (list, SIZE);
  30.         // Сортируем массив по возрастанию
  31.         quickSort (list, 0, SIZE - 1);
  32.         // Выводим значения отсортированного массива
  33.         print (list, SIZE);
  34.     }
  35.  
  36.     cout << endl << endl;
  37.     //system ("pause");
  38.     return 0;
  39. }
  40.  
  41. // -- Kordan С++ -----------------------------------------
  42. // Функция заполнения массива случайными целочисленными  -
  43. // значениями в диапазоне чисел                          -
  44. //                                                       -
  45. // Необходимо подключить:                                -
  46. // #include <cstdlib> (содержит srand() и rand())        -
  47. // #include <ctime>   (содержит time())                  -
  48. //                                                       -
  49. // Аргументы функции:                                    -
  50. // *arr      - Имя массива                               -
  51. // size      - Размер массива                            -
  52. // min_range - Минимальное значение диапазона            -
  53. // max_range - Максимальное значение массива             -
  54. // -- begin ----------------------------------------------
  55. int FillArray (int *arr, const int size, const int min_range, const int max_range) {
  56.     // Автоматическая рандомизация
  57.     srand (time (0));
  58.     for (int i = 0; i < size; i++) {
  59.         if (min_range <= max_range) arr[i] = min_range + rand () % (max_range + 1 - min_range);
  60.         else {
  61.             cout << "Ошибка!\nМаксимальное значение диапазона чисел должно быть больше минимального!\n";
  62.             return 1;
  63.         }
  64.     }
  65. }
  66. // -- end --
  67.  
  68. // -- Kordan C ++ ---------------------------------------
  69. // Функция вывода на консоль значений элементов массива -
  70. //                                                      -
  71. // Аргументы функции:                                   -
  72. // *arr - Имя массива                                   -
  73. // size - Размер массива                                -
  74. // -- begin ---------------------------------------------
  75. void print (int *arr, int size) {
  76.     for (int i = 0; i < size; i++) {
  77.         cout << *(arr + i) << " ";
  78.     }
  79.     cout << endl << endl;
  80. }
  81. // -- end --
  82.  
  83. // -- Kordan C ++ -----------------------------------
  84. // Функция сортировки массива определенного размера -  
  85. // методом Хоара                                    -
  86. //                                                  -
  87. // Аргументы функции:                               -
  88. // *arr  - Имя массива                              -
  89. // begin - Начало массива                           -
  90. // end   - Конец массива                            -
  91. //                                                  -
  92. // Пример использования:                            -
  93. // quickSort (list, 0, SIZE - 1);                   -
  94. // -- begin -----------------------------------------
  95. void quickSort (int *arr, int begin, int end) {
  96.     int first = begin, last = end;
  97.     int piv = arr[(first + last) / 2];
  98.     while (first <= last) {
  99.         while (arr[first] < piv) first++;
  100.         while (arr[last] > piv) last--;
  101.         if (first <= last) swap (arr[first++], arr[last--]);
  102.     }
  103.     if (begin < last) quickSort (arr, begin, last);
  104.     if (end > first) quickSort (arr, first, end);
  105. }
  106. // -- end --
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement