Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
1

Отсортировать двумерный динамический массив

14.08.2017, 14:35. Показов 1254. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте Ребята!Помогите кто разбирается
Задание отсортировать двумерный динамический массив
Вопрос
Сделать с него одномерный нельзя так как со статистическим?
по строкам отсортировала а как с конца строки перенести на другую и т.д
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.08.2017, 14:35
Ответы с готовыми решениями:

Отсортировать пузырьком двумерный динамический массив по возрастанию элементов в строках
Здравствуйте! Такая проблема. Мне нужно отсортировать двумерный динамический массив по возрастанию...

Отсортировать динамический массив по возрастанию
Отсортировать динамический массив по возрастанию. Помогите, плз

Динамический двумерный массив
Если число находится в интервале от 100 до 110, то используя подпрограмму, в матрицах Р(N,M),...

Двумерный Динамический массив
Здравствуйте, такая проблема: не могу задать int** и char**...проблема в том что в функцию...

7
Заблокирован
14.08.2017, 15:02 2
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
void print(int **a,int n,int m)
{
    for(int i=0; i<n; i++,cout<<endl) 
        for(int j=0; j<m; j++) 
        cout<<setw(3)<<a[i][j];
    cout<<endl;
}
void main(int argc,char **argv)
{
    int n,m;
    cout<<"n m:";
    cin>>n>>m;
    int **a=new int*[n];
    for(int i=0; i<n; i++) a[i]=new int[m];
    srand(size_t(time(0)));
    for(int i=0; i<n; i++) 
        for(int j=0; j<m; j++) a[i][j]=rand()%100;
    print(a,n,m);
    //
    for(int i=n*m-1; i; i--)
        for(int j=0; j<i; j++)
        if(a[i/m][i%m]<a[j/m][j%m])
        {
            int t=a[i/m][i%m];
            a[i/m][i%m]=a[j/m][j%m];
            a[j/m][j%m]=t;
        }
    print(a,n,m);
    //
    for(int i=0; i<n; i++) delete a[i];
    delete a;
Добавлено через 11 минут
или, стр23-27:
C++
1
swap(a[i/m][i%m],a[j/m][j%m]);
1
Рэмбо комнатный
103 / 103 / 99
Регистрация: 05.03.2017
Сообщений: 511
14.08.2017, 15:15 3
vfhbf, через часа полтора кину)
0
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
14.08.2017, 15:25  [ТС] 4
MansMI, спасибо непонятно только
if(a[i/m][i%m]<a[j/m][j%m])
и всё таки можно сделать с двумерн. динамического массива одномерный?
0
Заблокирован
14.08.2017, 15:30 5
можно, как промежуточный
0
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
14.08.2017, 15:34  [ТС] 6
MansMI,простите что означает промежуточный?
0
Заблокирован
14.08.2017, 15:45 7
Код
5 7 1                                              1 2 3
6 9 3 -> 5 7 1 6 9 3 2 4 8 -> 1 2 3 4 5 6 7 8 9 -> 4 5 6
2 4 8                                              7 8 9
0
Рэмбо комнатный
103 / 103 / 99
Регистрация: 05.03.2017
Сообщений: 511
14.08.2017, 15:56 8
Лучший ответ Сообщение было отмечено vfhbf как решение

Решение

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
#include <iostream>
#include <cstdlib>
#include <iomanip>
 
using namespace std;
 
void Sort(int* arr, size_t size)
{
    for (size_t i = 0; i < size - 1; i++)
    {
        for (size_t j = i + 1; j < size; j++)
        {
            if (arr[j] < arr[i])
            {
                swap(arr[i], arr[j]);
            }
        }
    }
}
 
void init(int** arr, size_t rows, size_t columns)
{
    for (size_t i = 0; i < rows; i++)
    {
        arr[i] = new int[columns];
    }
    for (size_t i = 0; i < rows; i++)
    {
        for (size_t j = 0; j < columns; j++)
        {
            arr[i][j] = rand() % 20 - 10;
        }
    }
}
 
void show(int** arr, size_t rows, size_t columns)
{
    cout << "Matrix:" << endl;
    for (size_t i = 0; i < rows; i++)
    {
        for (size_t j = 0; j < columns; j++)
        {
            cout << setw(3) << arr[i][j] << ' ';
        }
        cout << endl;
    }
}
 
void delmem(int** arr, size_t rows, size_t columns)
{
    for (size_t i = 0; i < rows; i++)
    {
        delete[] arr[i];
    }
    delete[] arr;
}
 
int main()
{
    setlocale(0, "");
    size_t n, m; cin >> n >> m;
    int** arr = new int*[n];
    init(arr, n, m);
    show(arr, n, m);
    int* temp = new int[n*m];
    size_t k = 0;
    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = 0; j < m; j++)
        {
            temp[k] = arr[i][j];
            k++;
        }
    }
    Sort(temp, n*m);
    k = 0;
    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = 0; j < m; j++)
        {
            arr[i][j] = temp[k];
            k++;
        }
    }
    delete[] temp;
    show(arr, n, m);
    delmem(arr, n, m);
    system("pause");
    return 0;
}
0
14.08.2017, 15:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.08.2017, 15:56
Помогаю со студенческими работами здесь

Динамический двумерный массив
Здравствуйте, начал недавно учить с++, смотрю видеоуроки. Дошел до этой темы и столкнулся с...

Двумерный динамический массив
Выскакивает ошибка Ошибка C2440 =: невозможно преобразовать &quot;int *&quot; в &quot;int...

Двумерный динамический массив
Здравствуйте, подскажите пожалуйста где ошибка? реализовал 2 фукнции ввода и вывода массива....

Двумерный динамический массив
Необходимо ввести с клавиатуры количество строк и столбцов массива(матрица размером N*M), ввести...


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

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