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

Как подправить код сортировки шейкером для двумерного массива, чтобы нормально работало

03.02.2021, 12:39. Показов 659. Ответов 1

Студворк — интернет-сервис помощи студентам
Есть код сортировки шейкером для одномерного массива (целые числа), есть попытка сделать из него сортировку двумерного по столбцам, которая почему-то сортирует только первые два столбца и при этом не сортирует в них последнюю строку. Как это можно исправить? Что изменить в коде? Помогите, пожалуйста.

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
//код для двумерного массива
#include <stdio.h> 
#include <iostream> 
#include <conio.h> 
#include <time.h> 
#include <windows.h> 
using namespace std;
void ShaikerSort(int** matr, int n)
{
    int l, r, i, k;
    int buf;
    k = l = 0;
    r = n-2;
    int j = 0;
    while (l <= r)
    {
        for (i = l; i <= r; i++)
            
            if (matr[i][j] > matr[i + 1][j])
            {
                buf = matr[i][j];
                matr[i][j] = matr[i + 1][j];
                matr[i + 1][j] = buf;
                k = i;
            }
        r = k - 1;
        j++;
        for (i = r; i >= l; i--) if (matr[i][j] > matr[i + 1][j])
        {
            buf = matr[i][j];
            matr[i][j] = matr[i + 1][j];
            matr[i + 1][j] = buf;
            k = i;
        }
        l = k + 1;
    }
}
int main() {
    int intRow;
    int intColum;
    cout << "Input the number of lines: \n"; //строки
    cin >> intRow;
 
    cout << "Input the number of columns: \n"; //столбцы
    cin >> intColum;
    // Создание двумерного массива
    int** Matric = new int* [intRow];
    for (int i = 0; i < intRow; i++) {
        Matric[i] = new int[intColum];
        for (int j = 0; j < intColum; j++) {
            Matric[i][j] = 1 + rand() % 100;
        }
    }
    //Вывод исходного массива
    cout << "\n" << "Matrix : " << "\n" << " \n";
    for (int i = 0; i < intRow; i++)
    {
        for (int j = 0; j < intColum; j++)
            printf(" %4d", Matric[i][j]);
        printf("\n");
    }
 
    //Сортировка
 
    for (int j = 1; j < intRow; j++)
        ShaikerSort(Matric, intColum);
 
    //Вывод отсортированного массива
    cout << "\n" << "Matrix : " << "\n" << " \n";
    for (int i = 0; i < intRow; i++)
    {
        for (int j = 0; j < intColum; j++)
            printf(" %4d", Matric[i][j]);
        printf("\n");
    }
 
    return 0;
}

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//код для одномерного массива (только функция)
void ShaikerSort(int* a, int n)
{
    int l, r, i, k;
    int buf;
    k = l = 0;
    r = n - 2;
    while (l <= r)
    {
        for (i = l; i <= r; i++)
            if (a[i] > a[i + 1])
            {
                buf = a[i]; a[i] = a[i + 1]; a[i + 1] = buf; k = i;
            }
        r = k - 1;
        for (i = r; i >= l; i--) if (a[i] > a[i + 1])
        {
            buf = a[i]; a[i] = a[i + 1]; a[i + 1] = buf; k = i;
        }
        l = k + 1;
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.02.2021, 12:39
Ответы с готовыми решениями:

Кто может исправить код, чтобы нормально работало окно?
Ребят кто может исправить этот код чтобы нормально работал окно &lt;script type=&quot;text/javascript&quot;...

Исправить код для сортировки двумерного массива
Здравствуйте! Укажите пожалуйста на мою ошибку. Нужно через быструю сортировку отсортировать двумерный массив, но что бы сортировались...

Как можно это переделать, чтобы нормально работало? (В задании нужно изменять значения x,y произвольно)
Private Sub Stend() Dim x As Single, y As Single, R As Single Dim C As Integer x = InputBox(&quot;x=&quot;) y = InputBox(&quot;y=&quot;) R = Sqr(x ^...

1
0 / 0 / 0
Регистрация: 02.02.2021
Сообщений: 8
03.02.2021, 18:54  [ТС]
Сама разобралась, может, кому пригодится мое решение. Не находила нигде шейкерную (или перемешиванием) сортировку именно для двумерного массива.

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
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
void Swap_cols(int** Mas, int i, int j)
{
    int temp;
    temp = Mas[i][j];
    Mas[i][j] = Mas[i - 1][j];
    Mas[i - 1][j] = temp;
}
//функция шейкерной сортировки для столбцов
void ShakerSort_cols(int** Mas, int Start, int N, int M)
{
    int Left, Right, i;
    Left = Start;
    Right = N - 1;
    while (Left <= Right)
    {
        for (i = Right; i >= Left; i--)
            for (int j = 0; j <= N; j++)
                if (Mas[i - 1][j] > Mas[i][j]) Swap_cols(Mas, i, j);
        Left++;
        for (i = Left; i <= Right; i++)
            for (int j = 0; j <= N; j++)
                if (Mas[i - 1][j] > Mas[i][j]) Swap_cols(Mas, i, j);
        Right--;
    }
}
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "rus");
 
    int rows, cols;
    int k = 0;
    int j = 0;
    int i;
 
    cout << "Задайте размерность массива:\n";
    cout << "Количество строк: ";
    cin >> rows;
    cout << "Количество столбцов: ";
    cin >> cols;
 
    int** mas = new int* [rows];
    int** mas1 = new int* [rows];
    int** mas2 = new int* [rows];
 
    cout << "Исходный массив: " << endl;
    for (int i = 0; i < rows; ++i) {
        mas[i] = new int[cols];
        mas1[i] = new int[cols];
        mas2[i] = new int[cols];
    }
 
 
    //заполняем массив случайными числами
    for (int i = 0; i < rows; ++i)
    {
        for (int j = 0; j < cols; ++j)
        {
            mas[i][j] = rand() % 100;
            mas1[i][j] = mas[i][j];
            mas2[i][j] = mas[i][j];
            cout << mas[i][j] << "\t";
        }
        cout << endl;
    }
    
    ShakerSort_cols(mas, 1, cols, rows);
    cout << "Новый массив: " << endl;
 
    for (int i = 0; i < rows; ++i)
    {
        for (int j = 0; j < cols; ++j)
            cout << mas[i][j] << "\t";
        cout << endl;
    }
 
 
    for (int i = 0; i < rows; ++i)
        delete[] mas[i];
 
    delete[] mas;
 
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.02.2021, 18:54
Помогаю со студенческими работами здесь

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

Как откомпилировать код, чтобы приложение работало без установленной Delphi?
где какие галочки нужно снять/поставить, чтобы мои программы работали на других компах, где нету делфи

Как подправить код, чтобы сортировка пузырьком работала одновременно для четных столбцов и четных строк?
В моем коде в матрице четные строки и четные столбцы сортируются пузырьком по возрастанию, но по очереди, т.е. сначала отсортировались все...

Подскажите как подправить код, чтобы ошибка не лезла
Подскажите как подправить код, чтобы ошибка не лезла: $output .= '&lt;form class=&quot;contact-form ' . ($top_margin!=&quot;none&quot; ?...

Вставить JS код в php-код и чтобы все работало
Я мало соображаю в js. Но задача очень важная. Мне в фильтр необходимо вставить ползунок значений. Но у меня много параметров и на...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
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