Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Диагонали, параллельные побочной по убыванию с помощью сортировки перемешиванием.
- #include <fstream>
- #include <iomanip>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- ifstream in("input.txt");
- ofstream out("output.txt");
- void print(int **a, int n)
- {
- out << n << endl;
- for (int i = 0; i < n; i++, out << endl)
- for (int j = 0; j < n; j++)
- out << setw(5) << left << a[i][j];
- }
- void shekerSort(int a[], int n)
- {
- int left = 0, right = n - 1; // левая и правая границы сортируемой области массива
- int flag = 1; // флаг наличия перемещений
- // Выполнение цикла пока левая граница не сомкнётся с правой
- // или пока в массиве имеются перемещения
- while ((left < right) && flag > 0)
- {
- flag = 0;
- for (int i = left; i < right; i++) //двигаемся слева направо
- {
- if (a[i] > a[i + 1]) // если следующий элемент меньше текущего,
- { // меняем их местами
- int t = a[i];
- a[i] = a[i + 1];
- a[i + 1] = t;
- flag = 1; // перемещения в этом цикле были
- }
- }
- right--; // сдвигаем правую границу на предыдущий элемент
- for (int i = right; i > left; i--) //двигаемся справа налево
- {
- if (a[i - 1] > a[i]) // если предыдущий элемент больше текущего,
- { // меняем их местами
- int t = a[i];
- a[i] = a[i - 1];
- a[i - 1] = t;
- flag = 1; // перемещения в этом цикле были
- }
- }
- left++; // сдвигаем левую границу на следующий элемент
- }
- }
- int main() {
- setlocale(LC_ALL, "Russian");
- int n, k, i, j;
- in >> n;
- int **a = new int*[n];
- for (int i = 0; i < n; i++)
- a[i] = new int[n];
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- in >> a[i][j];
- int b[100]; int c[100];
- for (k = 1; k < n; k++) {
- for (i = k, j = 0; i >= 0; i--, j++) {
- b[j] = a[i][j];
- }
- shekerSort(b, k + 1);
- for (i = k, j = 0; i >= 0; i--, j++) {
- a[i][j] = b[j];
- }
- for (j = n - k, i = n - 1; i >= 0; i--, j++) {
- c[j] = a[i][j];
- }
- shekerSort(c, n);
- for (j = n - k, i = n - 1; i >= 0; i--, j++) {
- a[i][j] = c[j];
- }
- }
- print(a, n);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement