Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <cstdlib>
- #include <iomanip>
- #include <string>
- #include <vector>
- #include <cmath>
- using namespace std;
- typedef vector <int> vi;
- // быстрая сортировка
- void quickSort (vi &v, int l, int r, int par)
- {
- if (par > 0) // сортировка по возрастанию
- if (l >= r) return; // подмассив длины 1 или l > r
- else
- {
- int m = v[(l + r) / 2];
- int li = l, ri = r;
- // разделяем массив на 2 подмассива:
- // в 1-ом подмассиве любой элемент < m
- // во 2-ом подмассиве любой элемент >= m
- while (li <= ri)
- {
- while (v[li] < m) ++li;
- while (v[ri] > m) --ri;
- if (li >= ri) break;
- swap(v[li++], v[ri--]);
- }
- quickSort(v, l, ri, par);
- quickSort(v, ri + 1, r, par);
- }
- else if (par < 0) // сортировка по убыванию
- if (l >= r) return; // подмассив длины 1 или l > r
- else
- {
- int m = v[(l + r) / 2];
- int li = l, ri = r;
- // разделяем массив на 2 подмассива:
- // в 1-ом подмассиве любой элемент >= m
- // во 2-ом подмассиве любой элемент <= m
- while (li <= ri)
- {
- while (v[li] > m) ++li;
- while (v[ri] < m) --ri;
- if (li >= ri) break;
- swap(v[li++], v[ri--]);
- }
- quickSort(v, l, ri, par);
- quickSort(v, ri + 1, r, par);
- }
- }
- // вывод на экран двумерного массива
- void print (vector <vi> v)
- {
- cout << left;
- for (int i = 0; i < v.size(); ++i, cout << '\n')
- for (int j = 0; j < v[i].size(); ++j)
- cout << setw(4) << v[i][j];
- cout << '\n';
- }
- // вывод на экран одномерного массива
- void print (vi v)
- {
- cout << left;
- for (int i = 0; i < v.size(); ++i)
- cout << setw(4) << v[i];
- cout << '\n';
- }
- int main()
- {
- int n; cout << "n = "; cin >> n;
- vector <vi> v (n, vi (n));
- for (int i = 0; i < n; ++i)
- for (int j = 0; j < n; ++j)
- v[i][j] = rand() % 100;
- cout << "\nВектор v: \n";
- print(v);
- cout << "\nДиагонали:\n";
- for (int k = 0; k < 2 * n - 1; ++k)
- {
- vi d; // вектор элементов некоторой диагонали вектора v
- for (int i = 0; i < n; ++i)
- {
- int j = i - k + n - 1;
- if (0 <= j && j < n) d.push_back(v[i][j]);
- }
- quickSort(d, 0, d.size() - 1, n - k - 1);
- print(d);
- int index = 0;
- for (int i = 0; i < n; ++i)
- {
- int j = i - k + n - 1;
- if (0 <= j && j < n) { v[i][j] = d[index]; ++index; }
- }
- }
- cout << "\nВектор v: \n";
- print(v);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement