Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/88: Рейтинг темы: голосов - 88, средняя оценка - 4.89
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429

Сортировка матрицы пузырьком

03.04.2016, 11:56. Показов 17873. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дано матрицу размерностью m на n, выглядеть должна так:
| 4 |
| 3 |
| 6 |
| 4 |
Надо вывести матрицу, найти максимальное и минимальное число, вывести 1ю и 3ю строку, и отсортировать пузырьком с помощью функции, на чем я и застрял, помогите разобратся, заранее спасибо!
C++ (Qt)
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
#include <iostream>
#include <conio.h>
#include <cmath>
#include <stdio.h>
#include <iomanip>
#include <ctime>
using namespace std;
 
void SortMass(int* a, int n)
{
    for (int i = 0; i < n; i++) 
        for (int j = 0; j < n - 1; j++)
            if (a[i] > a[j])
            {
                int temp = a[j];
                a[j] = a[i];
                a[i] = temp;
            }
    }
 
int main()
{
    int const m = 4, n = 1;
    int     a[m][n] = { 4 , 3 , 6 , 4 };
    int max, min;
        max = min = a[0][0];
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (a[i][j] < min)
                min = a[i][j];
            if (a[i][j] > max)
                max = a[i][j];
            cout << a[i][j] << endl;
        }
    }
    cout << "\nmax: " << max << "\nmin: " << min << endl;
    cout << endl;
    cout << "Vyvid 1 i 3 ryadka" << endl;
    for (int i = 0; i<m; i += 2) {
        for (int j = 0; j<n; j++)
            cout << a[i][j] << " ";
            cout << endl;
    }
    SortMass(a, n);
    system("pause");
    _getch();
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.04.2016, 11:56
Ответы с готовыми решениями:

Сортировка матрицы пузырьком и вставками
пример того как должно быть(Элементы обозначенные как 'x' не должны меняться). x x x x 15 x x x 13 14 x x 10 11 12 x 6 7 ...

Сортировка пузырьком рандомной матрицы
Здравствуйте, помогите пожалуйста решить задачу: Создать рандомную матрицу (вывести на экран) и рассортировать ее по возрастанию методом...

Сортировка матрицы вставками и пузырьком
Парни вот помоги немного))) Вобщем задание такое: Дана матрица, элементами которой являются латинские буквы. Отсортировать в...

18
 Аватар для Stitch Igorek
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 312
03.04.2016, 12:32
Вот нашел свой старый код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Пузырьковая сортировка с начала массива
    for (int i(0); i < N; i++)
        for (int j(0); j < i; j++)
        {
            if (Arr[i] > Arr[j])
            {
                long double tmp(Arr[j]);
                Arr[j] = Arr[i];
                Arr[i] = tmp;
            }
        }
    
// Пузырьковая сортировка с конца массива
    for (int i(N - 1); i >= 0; i--)
        for (int j(1); j <= i; j++)
        {
            if (Arr[j] > Arr[j - 1])
            {
                long double tmp(Arr[j]);
                Arr[j] = Arr[j - 1];
                Arr[j - 1] = tmp;
            }
        }
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
06.04.2016, 14:37  [ТС]
У меня выдает ошибку аргумент типа "int (*)[1]" несовместим с параметром типа "int *", что я сделал не так?

Добавлено через 34 минуты
Помогте, плес
0
 Аватар для Stitch Igorek
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 312
06.04.2016, 17:04
Цитата Сообщение от Azazel-San Посмотреть сообщение
У меня выдает ошибку аргумент типа "int (*)[1]" несовместим с параметром типа "int *", что я сделал не так?

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

Добавлено через 5 минут
забыл добавить - двухмерный массив сортируется так же, но в три цикла, где Arr[0][0], пробегает со сравнением по всем элементам до Arr[n-1][m-1]. дальше так же пробегает Arr[0][1], и так далее.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
07.04.2016, 13:45  [ТС]
Stitch Igorek, можешь написать код? Если это не сложно, ато по объяснениям ничего не ясно
0
 Аватар для TimeTwo
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
07.04.2016, 14:21
Azazel-San, во первых передача массива в функцию
во вторых : Пронумеруем все элементы массива в порядке сортировки. Из номера n элемента, можно вычислить его "двумерные координаты" в массиве:
C++
1
2
i = n / numColumns;
j = n % numColumns;
Теперь мы можем применить метод пузырька, рассматривая наш двумерный массив как одномерный:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int* elem(int** arr, int n, int numColumns) {
    return &(arr[n / numColumns][n % numColumns]);
}
 
void swap(int* a, int* b) {
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
 
...
 
const int numColumns = 4;
const int numRows = 2;
const int numElements = numColumns * numRows;
for (int pass = 0; pass < numElements - 1; ++pass) {
    for (int n = 0; n < numElements - pass - 1; ++n) {
        if (*elem(t, n, numColumns) > *elem(t, n + 1, numColumns)) {
            swap(elem(t, n, numColumns), elem(t, n + 1, numColumns));
        }
    }
}
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
07.04.2016, 15:21  [ТС]
TimeTwo, а вот целым метод пузырька, в функцию записать нельзя, в месте с циклами?
И если не сложно объясни что за что отвечает в коде?
0
 Аватар для TimeTwo
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
07.04.2016, 15:29
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int* elem(int** arr, int n, int numColumns) {        // функция расчета указателя на элемент массива     
return &(arr[n / numColumns][n % numColumns]);                  //  относительно матрицы...
}
 
void swap(int* a, int* b) {     // функция замены элементов
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
 
...
 
const int numColumns = 4;                                                 
const int numRows = 2;
const int numElements = numColumns * numRows;
for (int pass = 0; pass < numElements - 1; ++pass) {                       // сортировка
    for (int n = 0; n < numElements - pass - 1; ++n) {
        if (*elem(t, n, numColumns) > *elem(t, n + 1, numColumns)) {   // вызов функции соответствия элементов
            swap(elem(t, n, numColumns), elem(t, n + 1, numColumns));  // вызов функции замены соответствующих элементов в массиве и затем вызов функции соответствия
        }
    }
}
Добавлено через 48 секунд
Azazel-San, я как то не пытался решать проблему с делением на строки по - другому ...
0
 Аватар для SadenSC
2 / 2 / 1
Регистрация: 03.12.2015
Сообщений: 7
07.04.2016, 16:07
Есть рабочий код для пузырьковой сортировки
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
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
    setlocale (LC_ALL, "Rus");
    int *elem; // указатель для выделения памяти под массив
    int size; // размер массива
    
    // Ввод количества элементов массива
    cout << "Размер массива = ";
    cin >> size;
 
    if (size <= 0) {
        // Размер масива должен быть положитлеьным
        cout << "Не вводите размер массива меньше нуля!" << endl;
        return 1;
    }
 
    elem = new int[size]; // выделение памяти под массив
 
    // заполнение массива
    for (int i = 0; i < size; i++) {
        cout << "Элемент массива[" << i << "] = ";
        cin >> elem[i];
    }
 
    int temp; // временная переменная для обмена элементов местами
 
    // Сортировка массива пузырьком
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (elem[j] > elem[j + 1]) {
                // меняем элементы местами
                temp = elem[j];
                elem[j] = elem[j + 1];
                elem[j + 1] = temp;
            }
        }
    }
 
    cout << "Отсортированный массив" << endl;
    // Вывод отсортированного массива на экран
    for (int i = 0; i < size; i++) {
        cout << elem[i] << " ";
    }
    cout << endl;
 
    delete [] elem; // освобождение памяти;
    system("pause");
    return 0;
}
0
 Аватар для TimeTwo
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
07.04.2016, 16:19
SadenSC, умничка! а где, собственно, сортировка матрицы ?
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
07.04.2016, 18:40  [ТС]
TimeTwo, а что такое t? Выдает ошибку..

Добавлено через 4 минуты
TimeTwo, предположил что t матрица но тогда пишет error: cannot convert 'int (*)[1]' to 'int**' for argument '1' to 'int* elem(int**, int, int)'|
0
 Аватар для TimeTwo
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
08.04.2016, 09:27
Лучший ответ Сообщение было отмечено Azazel-San как решение

Решение

Azazel-San,
Цитата Сообщение от TimeTwo Посмотреть сообщение
int** arr
C++
1
t[numColumns][numRows]// матрица
Добавлено через 53 минуты
Azazel-San, все это один большой хак. Формально язык не допускает переинтерпретацию многомерного массива, как одномерного
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
#include <iostream>
#include <cstdlib>
using namespace std;
int* elem(int** arr, int n, int numColumns);
void swap(int* a, int* b);
int main()
{
    int m=4, n=4;
    int** arr = new int*[m];
    for(int i = 0; i < m; i++) {
        arr[i] = new int[n];
        cout<<endl;
        for(int j = 0; j < n; j++) {
            arr[i][j] = 1 + rand()%100;
            cout<<arr[i][j]<<" ";
        }
    }
    const int numElements = m * n;
    for(int i=0;i<numElements;++i) {
        for(int j=0;j<numElements-i-1;++j) {
            if(*elem(arr, j, n) > *elem(arr, j+1, n)) {
                swap(elem(arr, j, n), elem(arr, j+1, n));
            }
        }
    }
    cout<<endl<<endl;
    for(int i=0;i<m;i++){
        cout<<endl;
        for(int j=0;j<n;j++){
            cout<<arr[i][j]<<" ";
        }
    }
    for(int i=0;i<m;i++){
        delete [] arr[i];
    }
    delete [] arr;
 
    return 0;
}
void swap(int* a, int* b) {
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
int* elem(int** arr, int n, int numColumns) {
    return &(arr[n / numColumns][n % numColumns]);
}
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
08.04.2016, 17:27  [ТС]
TimeTwo, а так не проще? я уже сам разобрался?

Добавлено через 26 секунд
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void SortMass(int(&a)[m][n], int n, int m)
{
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m - 1; j++) {
            for (int k = 1; k < m; k++) {
                if (a[k][i] < a[k - 1][i]) {
                    int temp = a[k][i];
                    a[k][i] = a[k - 1][i];
                    a[k - 1][i] = temp;
                }
            }
        }
    }
}
0
 Аватар для TimeTwo
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
11.04.2016, 08:33
Azazel-San, вы так отсортируете элементы в столбце по убыванию
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
11.04.2016, 14:39  [ТС]
TimeTwo, ну да и что..
0
 Аватар для TimeTwo
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
11.04.2016, 14:46
Azazel-San, то, что ваши элементы матрицы не будут все отсортированы от меньшего к большему предложенным вами способом, вы либо плохо описали то, что вам нужно, либо ошибаетесь в коде
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
11.04.2016, 16:41  [ТС]
TimeTwo, ну по сути это тот же пузырёк, просто именно под мою матрицу мне удобнее было сделать по столбцам(можно же и переделать под обычную сортировку), ведь я выше писал она у меня 4х1, суть не в сортировке сейчас идёт, а об функции
0
 Аватар для TimeTwo
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
11.04.2016, 16:46
Azazel-San,
Цитата Сообщение от TimeTwo Посмотреть сообщение
передача массива в функцию
ссылку посмотрите, и все станет ясно
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
11.04.2016, 16:51  [ТС]
TimeTwo, зачем?

Добавлено через 26 секунд
программа же работает уже. как бы все ясно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.04.2016, 16:51
Помогаю со студенческими работами здесь

Сортировка элементов матрицы пузырьком и методом включения
Помогите с заданием пожалуйста) Задано матрицу 4х10. Отсортировать парные строки по возрастанию, а непарные - по убыванию. Использовать для...

Сортировка диагоналей матрицы, которые параллельны побочной, пузырьком
Здравствуйте. Прошу помочь с задачей: В исходном текством файле расположена матрица размером nxn, содержащая целые числа. Задача:...

Сортировка пузырьком
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #define N 9 ...

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

Сортировка пузырьком
Здравствуйте! Решаю задачу:пользователь вводит слова через пробел,я должен вывести их в алфавитном порядке.Моя проблема в сортировке.Что...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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 - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru