0 / 0 / 0
Регистрация: 16.05.2018
Сообщений: 48
1

Сортировка двумерного массива методом выбора

22.03.2021, 00:58. Показов 1165. Ответов 4

Author24 — интернет-сервис помощи студентам
Дан двумерный массив, нужно отсортировать его методом выбора.

Допустим дан такой массив:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{vmatrix}3&5&1 \\ 6&4&9 \\ 8&7&2 \end{vmatrix}

Нужно, чтобы получилась такая сортировка:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{vmatrix}1&2&3 \\ 4&5&6 \\ 7&8&9 \end{vmatrix}


Помогите пожалуйста понять что не так в моём коде с сортировкой

Код:
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
#include <iostream>
#include <windows.h>
#include <ctime>
#include <cstdlib> 
 
using namespace std;
 
void enter_arr(int**, int, int, int, int);
void printDiap_arr(int**, int, int, int, int);
void selectionSort(int**, int, int);
 
int main()
{
    SetConsoleOutputCP(1251);
 
    const int n = 16;
    const int m = 12;
    int **arr=new int *[n];
    for (int i = 0; i < n; i++)
        arr[i] = new int[m];
 
    cout << "Дан массив: ";
    enter_arr(arr, 0, 0, n, m);
    printDiap_arr(arr, 0, 0, n, m);
    selectionSort(arr, n, m);
 
    for (int i = 0; i < n; i++)
        delete[] arr[i];
    delete[] arr;
    return 0;
}
 
void enter_arr(int **a, int ii, int jj, int in, int jm)
{
    srand(time(0));
    for(int i=ii; i<in; i++)
        for (int j = jj; j < jm; j++)
            a[i][j]= 10 + rand() % 91;
}
 
void selectionSort(int** a, int n, int m)
{
    int min_1, min_2, temp;
    for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m-1; j++)
            {
                min_1 = i;
                min_2 = j;
                for (int l = i + 1; l < n; l++)
                {
                    for (int k = 0; k < m; k++)
                    {
                        if (a[l][k] < a[min_1][min_2])
                        {
                            min_1 = l;
                            min_2 = k;
                        }
                    }
                }
                temp = a[i][j];
                a[i][j] = a[min_1][min_2];
                a[min_1][min_2] = temp;
            }
    }
    cout << "Результат сортировки: ";
    printDiap_arr(a, 0, 0, n, m);
 
}
 
void printDiap_arr(int** a, int ii, int jj, int in, int jm)
{
    int forCount = 0;
    for(int i=ii; i<in; i++)
        for (int j = jj; j < jm; j++)
        {
            cout.width(5); 
            cout << a[i][j]; 
            if (forCount == 11) 
            {
                cout << endl; 
                forCount = 0; 
            }
            else 
                forCount++; 
        }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2021, 00:58
Ответы с готовыми решениями:

Сортировка двумерного массива методом выбора
Создать двумерный массив 5х5. Заполнить случайными числами. Отсортировать выбором в порядке...

Сортировка двумерного массива методом выбора
Здравствуйте! В книге С/С++ Павловская, метод выбора показан для одномерного массива таким...

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

Сортировка двумерного массива методом Выбора. Select sort
Задание: Упорядочить каждую строку матрицы по убыванию. Отсортировал пузырьком, а вот &quot;Выбором&quot;...

4
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.03.2021, 01:06 2
Smehota, если размеры массива заданы (как у Вас в коде) можно применить статический массив. в памяти элементы такого массива расположены последовательно, следовательно массив можно отсортировать как одномерный. если не получится, сообщите.
0
0 / 0 / 0
Регистрация: 16.05.2018
Сообщений: 48
22.03.2021, 01:22  [ТС] 3
Yetty, Не совсем понимаю как это реализовать. Если можно, то подскажите пожалуйста более подробно.
Как отсортировать одномерный массив я знаю, но применить алгоритм сортировки одномерного для двумерного у меня не выходит
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.03.2021, 01:43 4
примерно так:
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>
#include <ctime>
using namespace std;
 
void Random (int a[][12], int n, int m)
{
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
        a[i][j]=rand()%9 + 1;
} 
 
void Selection_sort(int *a, int k)
{
    for (int i = 0; i < k; i++)
    {
        int imax = i;
        for (int j = i + 1; j < k; j++)
        {
            if (a[imax] > a[j])
                imax = j;
        }
        swap(a[i], a[imax]);
    }
}
 
void Print (int a[][12], int n, int m)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)       
        cout << a[i][j] << " ";        
    cout << "\n";
    }
}    
 
int main()
{
    srand((int)time(0));    
    const int n=10, m=12;
    int a[n][m];  
    
    Random(a,n,m);
    cout << "Matrix:\n";
    Print(a,n,m);
    Selection_sort(&a[0][0],n*m);
    cout << "Sorted matrix:\n";
    Print(a,n,m);   
     
system("pause");
return 0;
}
1
2809 / 2318 / 702
Регистрация: 29.06.2020
Сообщений: 8,566
22.03.2021, 03:27 5
Лучший ответ Сообщение было отмечено Smehota как решение

Решение

Smehota, можно вот такой костыль сделать
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
void selectionSort(int** a, int n, int m)
{
    int posi, posj;
    int ii,jj;
    for(int i = 0; i < n; ++i) // i - номер текущего шага
        for(int j = 0; j < m; ++j) // i - номер текущего шага
        {
            posi = i; posj = j;
            for(ii = i, jj = j+1; ii < n; ++jj)
            {
                if (jj==m) 
                {
                    jj=0; ++ii;
                    if (ii==n)
                        break;
                }
                if (a[ii][jj] < a[posi][posj])
                {
                    posi = ii; posj=jj;
                }
            }
            swap(a[i][j], a[posi][posj]);
        }
}
1
22.03.2021, 03:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2021, 03:27
Помогаю со студенческими работами здесь

Сортировка массива методом выбора
Доброго времени суток, форумчане! void sortar(int *a, int N) { int fl, i, j, temp = 0; do {...

Сортировка массива методом выбора
Помогите, пожалуйста!в сишке я не особо разбираюсь... вот задание: Отсортировать элементы массива...

Сортировка массива методом выбора
Вот нужно применить сортировку массивов Сортировка выбором. Находим (выбираем) в массиве...

Сортировка массива методом выбора
Добрый вечер!!! В данном коде идет сортировка массива методом шелла Нужно переделать ее как...

Сортировка массива методом простого выбора
Здравствуйте. Нашел код на Pascal можете перевести в с++. Написать процедуру сортировки массива...

Сортировка массива методом прямого выбора
Объясните пожалуйста как работает эта программа. Задание: Массив из 5 целых чисел заполнить с...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru