Advertisement
Kordan

Сортировка массива с автоопределением его длины

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