Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 04.01.2016
Сообщений: 9

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

24.06.2017, 13:39. Показов 2979. Ответов 2

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

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

Размер: 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.06.2017, 13:39
Ответы с готовыми решениями:

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

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

Быстрая сортировка по возрастанию и убыванию.ПОМОГИТЕ!
Народ,помогите!!!! Имеется алгоритм быстрой сортировки,которая должна сортировать массив,введенный в StringGrid по возрастанию и убыванию...

2
0 / 0 / 0
Регистрация: 04.01.2016
Сообщений: 9
24.06.2017, 16:59  [ТС]
Цитата Сообщение от miklas Посмотреть сообщение
Вариант с транспортированием
С транспонированием, конечно
0
0 / 0 / 0
Регистрация: 28.01.2019
Сообщений: 1
28.01.2019, 14:32
Добрый день, не хочу новую тему заводить, здесь прозвучал вариант сортировки с использованием транспонирования матрицы, подскажите или дайте ссылочку ,уважаемые, как можно использовать транспонирование матрицы для сортировки по сумме столбцов 2-ого массива, спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.01.2019, 14:32
Помогаю со студенческими работами здесь

Быстрая сортировка: отсортировать по возрастанию отдельно элементы первой и второй половин массива
Массив содержит четное количество элементов. Напишите программу, которая сортирует по возрастанию отдельно элементы первой и второй половин...

Матрицы. Быстрая сортировка
Дана матрица. Упорядочить элементы строк матрицы по убыванию, а сами строки по убыванию характеристик строк. Характеристикой строки...

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

Быстрая сортировка матрицы
Помогите пожалуйста, необходимо отсортировать в матрице строки по возрастанию элементов в первом столбце методом быстрой сортировки

Быстрая сортировка матрицы
Добрый день. Возникла необходимость выполнить сортировку методом быстрой сортировкой. Перечитал кучу сайтов, где описаны алгоритмы и...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru