Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
miklas
0 / 0 / 0
Регистрация: 04.01.2016
Сообщений: 7
#1

Быстрая сортировка стобцов матрицы по возрастанию - C++

24.06.2017, 13:39. Просмотров 217. Ответов 1

Всем доброго времени суток! Задается квадратная матрица с четным количеством строк и стобцов, нужно отсортировать ее столбцы по возрастанию, по схеме:
Название: практика.png
Просмотров: 14

Размер: 1.2 Кб, где пустое пространство - нули.
Есть код, который сортирует эту матрицу по строкам по схеме: Название: практика2.png
Просмотров: 14

Размер: 1.3 Кб. Нужно переделать функции sort и sort_quick, чтобы сортировались столбцы. Вариант с транспортированием матрицы желательно не предлагать.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <conio.h>
#include <locale.h>
using namespace std;
 
typedef int telem;      //определение типа элементов массива
typedef telem *tstr;   //определение типа "указатель на telem"
typedef tstr *tmatr;    //определение типа "указатель на указатель на telem"
void inputmatr(tmatr, int);
void outputmatr(tmatr, int);
void sort(tmatr, int);
void null(tmatr, int);
void sort_quick(tstr, int, int, int);
 
 
int main() {
    int n;      //число строк матрицы
    tmatr a;        //объявляется переменная-указатель на указатель на telem
    setlocale(LC_ALL, "Russian");
    cout << "Введите размер квадратной матрицы: ";
    do {
        cin >> n;
        if (n % 2 != 0)
            cout << "Матрица должна быть четного размера." << endl << "Повторите ввод - ";
    } while (n % 2 != 0);
    a = new tstr[n];    //выделение динамической памяти под массив
                        //указателей на строки массива
    for (int i = 0; i < n; i++)     //цикл выделения памяти под каждую строку
        *(a + i) = new telem[n];//каждому элементу массива указателей
                                //на строки присваивается адрес начала
                                //области памяти, выделяемой под строку
    inputmatr(a, n);
    cout << "Исходная матрица:\n";
    outputmatr(a, n);
    sort(a, n);
    null(a, n);
    cout << "Матрица с отсортированными строками:" << endl;
    outputmatr(a, n);
    cout << endl;
    //Освобождение динамической памяти
    for (int i = 0; i < n; i++)
        delete a[i];
    delete a;
    getch();
    return 0;
}
 
void inputmatr(tmatr a, int str) {
    cout << "Введите построчно через пробел элементы" << endl;
    cout << "двумерного массива размера " << str << "x" << str << endl;
    cout << "После ввода строки нажимайте <Enter>" << endl;
    for (int i = 0; i < str; i++)
        for (int j = 0; j < str; j++)
            cin >> *(*(a + i) + j);
}
 
void outputmatr(tmatr a, int str) {
    for (int i = 0; i < str; i++) {
        for (int j = 0; j < str; j++) {
            cout.width(2);
            cout << *(*(a + i) + j) << ' ';
        }
        cout << '\n';
    }
}
 
void sort(tmatr a, int n) {
    telem z;
    for (int i = 0, x; i < n; i++) {
        x = i < n / 2 ? n / 2 - i - 1 : i - n / 2;
        sort_quick(a[i], 0, x, 0);
        sort_quick(a[i], n - x - 1, n - 1, 1);
    }
}
 
void sort_quick(tstr a, int t, int n, int z) { //z - по возрастанию (1)/по убыванию (0)
    int i = t,      //левая граница сортируемого фрагмента
        j = n;      //правая граница сортируемого фрагмента
    telem x, y;
    x = a[(t + n) / 2];
    do {
        if (z) {
            while (a[i] < x)
                i++;
            while (x < a[j])
                j--;
        }
        else {
            while (a[i] > x)
                i++;
            while (x > a[j])
                j--;
        }
        if (i <= j)
        {
            y = a[i];
            a[i] = a[j];
            a[j] = y;
            i++;
            j--;
        }
    } while (i < j);
    if (t < j) sort_quick(a, t, j, z);
    if (i < n) sort_quick(a, i, n, z);
}
 
 
void null(tmatr a, int n) {
    for (int i = 1, x; i < n - 1; i++) {
        x = i < n / 2 ? n / 2 - i : i - n / 2 + 1;
        for (int j = x; j < n - x; j++)
            a[i][j] = 0;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2017, 13:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Быстрая сортировка стобцов матрицы по возрастанию (C++):

Быстрая сортировка по возрастанию - C++
Добрый день, хотел попросить помощи, смотрел в интернете на тему быстрой сортировки, но адекватного объяснения, понятного мне, я не нашел....

Быстрая сортировка. Сложности с сортировкой по возрастанию и убыванию - C++
Сложность в то, что не корректно работает быстрая сортировка по возрастанию и убыванию. В консоли приходится несколько раз выбирать способ...

Быстрая сортировка матрицы - C++
помогите пожалуста из задачей мне нужен исходничек какойто простенькой быстрой сортировки матрицы состоящей из чисел

Сортировка матрицы по возрастанию - C++
Есть матрица 6x6 слов длиной 4 буквы . Нужно упорядочить матрицу по возростанию . Как это сделать ?

Сортировка строк матрицы по возрастанию - C++
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;time.h&gt; using namespace std; const int n = 3; void...

Сортировка матрицы змейкой по возрастанию - C++
Здравствуйте, есть такая задача: Дана матрица (N+15)x(N+15) отсортировать по возрастанию и записать результат в виде вертикальной...

1
miklas
0 / 0 / 0
Регистрация: 04.01.2016
Сообщений: 7
24.06.2017, 16:59  [ТС] #2
Цитата Сообщение от miklas Посмотреть сообщение
Вариант с транспортированием
С транспонированием, конечно
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2017, 16:59
Привет! Вот еще темы с ответами:

Сортировка элементов строк матрицы по возрастанию - C++
Дано матрица с размером NxM надо сортировать элементы строка по возрастаню ввод данных 2 5 17 -22 1 -58 28 58 64 81 37 71 ...

перевод кода с паскаля на С++ (Сортировка матрицы по возрастанию) - C++
Здравствуйте, помогите пожалуйста перевести код с паскаля в с++. Сортировка матрицы по возрастанию Задан двухмерный массив...

Сортировка строк матрицы по возрастанию первых элементов - C++
Составить программу, которая переформирует заданную матрицу так, чтобы ее строки расспалагались в порядке возрастания их первых элементов. ...

Сортировка строк матрицы по возрастанию суммы их элементов - C++
Собственно не могу понять какой алгоритм сортировки рядков по сумме их элементов? #include &lt;iostream&gt; using namespace std; int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru