DilyaraL

task5.3

Dec 2nd, 2021
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. void qsortRecursive(int* mas, int size) {
  2. //Указатели в начало и в конец массива
  3. int i = 0;
  4. int j = size - 1;
  5.  
  6. //Центральный элемент массива
  7. int mid = mas[size / 2];
  8.  
  9. //Делим массив
  10. do {
  11. //Пробегаем элементы, ищем те, которые нужно перекинуть в другую часть
  12. //В левой части массива пропускаем(оставляем на месте) элементы, которые меньше центрального
  13. while (mas[i] < mid) {
  14. i++;
  15. }
  16. //В правой части пропускаем элементы, которые больше центрального
  17. while (mas[j] > mid) {
  18. j--;
  19. }
  20.  
  21. //Меняем элементы местами
  22. if (i <= j) {
  23. int tmp = mas[i];
  24. mas[i] = mas[j];
  25. mas[j] = tmp;
  26.  
  27. i++;
  28. j--;
  29. }
  30. } while (i <= j);
  31.  
  32.  
  33. //Рекурсивные вызовы, если осталось, что сортировать
  34. if (j > 0) {
  35. //"Левый кусок"
  36. qsortRecursive(mas, j + 1);
  37. }
  38. if (i < size) {
  39. //"Првый кусок"
  40. qsortRecursive(&mas[i], size - i);
  41. }
  42. }
  43.  
  44. void task5_3()
  45. {
  46. int n, S,x;
  47. cout << "n= ";
  48. cin >> n;
  49. cout << "s= ";
  50. cin >> S;
  51. cout << "a= ";
  52. int* ar = new int[n];
  53. for (int i = 0; i < n; i++)
  54. {
  55. cin >> x;
  56. ar[i] = x;
  57. }
  58. qsortRecursive(ar, n);
  59. for (size_t i = 0; i < n; i++)
  60. {
  61. cout << ar[i] << " ";
  62. }
  63. cout << endl;
  64.  
  65. int i = 0, j = n - 1, k=0;
  66. while (i < j)
  67. {
  68. if (ar[i] + ar[j] == S)
  69. {
  70.  
  71. k ++;
  72. i++;
  73. j--;
  74. }
  75. else
  76. {
  77. if (ar[i] + ar[j] > S)
  78. j--;
  79. else
  80. i++;
  81. }
  82. }
  83. cout << "k= " << k << endl;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment