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_2(int n)
- {
- int* ar = new int[n];
- for (int i = 0; i < n; i++)
- {
- ar[i] = rand()%100+1;
- cout << ar[i] << " ";
- }
- cout << endl;
- qsortRecursive(ar, n);
- int s = 0,s1=0;
- for (int i = 1; i < n; i++)
- {
- s = ar[i-1] +s;
- s1 = s1 + s;
- cout << s << ' ';
- //второй ждет только первого; третий ждет и второго и первого
- }
- cout << endl<<s1;
- }
- void task5_3()
- {
- int n, S;
- cin >> n;
- cin >> S;
- int* ar = new int[n];
- for (int i = 0; i < n; i++)
- {
- ar[i] = rand() % 10 ;
- if (i % 3 == 0)
- ar[i] = -ar[i];
- }
- qsortRecursive(ar, n);
- for (size_t i = 0; i < n; i++)
- {
- cout << ar[i] << " ";
- }
- cout << endl;
- int i = 0, j = n - 1, k=0,k1,k2;
- while (i < j)
- {
- if (ar[i] + ar[j] == S)
- {
- k1 = 1;
- k2 = 1;
- while ((ar[i] == ar[i + 1])&&(i < j))
- {
- k1++;
- i++;
- }
- while ((ar[j] == ar[j - 1])&&(i < j))
- {
- k2++;
- j--;
- }
- k += k1 * k2;
- i++;
- j--;
- }
- else
- {
- if (ar[i] + ar[j] > S)
- j--;
- else
- i++;
- }
- }
- cout << "k= " << k << endl;
- }
Add Comment
Please, Sign In to add comment