Advertisement
Guest User

VOLKOV CHMA

a guest
Feb 20th, 2020
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. #define MAX_INT (long)pow(2,8*sizeof(int) - 1) - 1 //Максимальное число типа int
  4. #define MIN_INT (long)pow(2,8*sizeof(int) - 1) //Минимальное число типа int
  5. #define LEN_STRING 1000
  6.  
  7. int enterInt(int min, int max);
  8. int enterArray();
  9. void quickSort(int* a, int n, int first, int last);
  10. void outputArray(int* a, int n);
  11.  
  12. int main(int* a, int n)
  13. {
  14. setlocale(LC_ALL, "Rus"); //Русская раскладка в консоли
  15.  
  16. printf("Упорядочивание элементов массива по возрстанию методом быстрой сортировки\n\n");
  17. enterArray();
  18. system("PAUSE");
  19. }
  20.  
  21. int enterArray() // Ввод массива
  22. {
  23. int *a;
  24. int n;
  25.  
  26. printf("Введите количество элементов массива:\n");
  27. n = enterInt(1, LEN_STRING);
  28.  
  29. printf("Введите эементы массива:\n");
  30. a = (int*)malloc(n * sizeof(int));
  31. for (int i = 0; i < n; i++)
  32. a[i] = enterInt(MIN_INT, MAX_INT);
  33.  
  34. printf("Исходный массив:\n");
  35. outputArray(a, n);
  36. printf("\n");
  37.  
  38. quickSort(a, n, 0, n - 1);
  39.  
  40. printf("\nОтсортированный массив:\n");
  41. outputArray(a, n);
  42. return 0;
  43. }
  44.  
  45. int enterInt(int min, int max) //Проверка вводимого пользователем числа в заданном диапазоне
  46. {
  47. long int integer; //Вводимое число типа int
  48.  
  49. while (1)
  50. {
  51. if (scanf_s("%d", &integer) != 1) //Проверка на ввод символа
  52. {
  53. printf("Неверный ввод! Введите целочсленное число.\n");
  54. while (getchar() != '\n');
  55. }
  56. else
  57. {
  58. if ((integer >= min) && (integer <= max))
  59. return integer;
  60. else
  61. printf("Неверный ввод! Введите число в диапазоне от %d до %d.\n", min, max);
  62. }
  63. }
  64. }
  65.  
  66. void quickSort(int* a, int n, int first, int last) //Метод быстрой сортировки
  67. {
  68. int l = first, r = last; //Индекс левой и правой границы сортируемого диапазона
  69. int mid = (first + last) / 2; //Индекс среднего значения сортируемого диапазона
  70. int mid0; //Значение среднего элемента массива перед началом сортировки
  71. int temp;
  72.  
  73. do
  74. {
  75. mid0 = a[mid];
  76. while (a[mid] > a[l]) l++;
  77. while (a[r] > a[mid]) r--;
  78. if (l <= r)
  79. {
  80. temp = a[l];
  81. a[l] = a[r];
  82. a[r] = temp;
  83. l++;
  84. r--;
  85. }
  86.  
  87. if (a[mid] != mid0) //При смене среднего значения массива, запускаем цикл заного
  88. {
  89. l = 0;
  90. r = n - 1;
  91. }
  92. } while (l <= r);
  93.  
  94. outputArray(a, n);
  95.  
  96. if (l < last) quickSort(a, n, mid + 1, last);
  97. if (first < r) quickSort(a, n, first, mid - 1);
  98. }
  99.  
  100. void outputArray(int* a, int n)
  101. {
  102. for (int i = 0; i < n; i++)
  103. printf("a[%d]=%d; ", i, a[i]);
  104. printf("\n");
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement