Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void qsortRecursive(int* mas, int size) {
- //Указатели в начало и в конец массива
- int i = 0;
- int j = size - 1;
- //Центральный элемент массива
- int mid = mas[size / 2];
- //Делим массив
- do {
- //Пробегаем элементы, ищем те, которые нужно перекинуть в другую часть
- //В левой части массива пропускаем(оставляем на месте) элементы, которые меньше центрального
- while (mas[i] < mid) {
- i++;
- }
- //В правой части пропускаем элементы, которые больше центрального
- while (mas[j] > mid) {
- j--;
- }
- //Меняем элементы местами
- if (i <= j) {
- int tmp = mas[i];
- mas[i] = mas[j];
- mas[j] = tmp;
- i++;
- j--;
- }
- } while (i <= j);
- //Рекурсивные вызовы, если осталось, что сортировать
- if (j > 0) {
- //"Левый кусок"
- qsortRecursive(mas, j + 1);
- }
- if (i < size) {
- //"Првый кусок"
- qsortRecursive(&mas[i], size - i);
- }
- }
- void task5_3()
- {
- int n, S,x;
- cout << "n= ";
- cin >> n;
- cout << "s= ";
- cin >> S;
- cout << "a= ";
- int* ar = new int[n];
- for (int i = 0; i < n; i++)
- {
- cin >> x;
- ar[i] = x;
- }
- qsortRecursive(ar, n);
- for (size_t i = 0; i < n; i++)
- {
- cout << ar[i] << " ";
- }
- cout << endl;
- int i = 0, j = n - 1, k=0;
- while (i < j)
- {
- if (ar[i] + ar[j] == S)
- {
- k ++;
- i++;
- j--;
- }
- else
- {
- if (ar[i] + ar[j] > S)
- j--;
- else
- i++;
- }
- }
- cout << "k= " << k << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment