Форум программистов, компьютерный форум CyberForum.ru

Поменять местами строки в массиве - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.79
ol4ik
 Аватар для ol4ik
22 / 21 / 6
Регистрация: 08.04.2010
Сообщений: 90
16.11.2010, 23:17     Поменять местами строки в массиве #1
Дана матрица размера M x N. Поменять местами ее строки так, чтобы их минимальные элементы образовывали возрастающую последовательность.

Моя идея в том,чтобы найти все минимальные элементы строк и записать их в одномерный массив,потом отсортировать.Это легко.А вот что потом..Чтобы поменять строки в двумерном массиве местами,нужно начиная с первого индекса одномерного массива проверить,в какой строке двумерного есть значение.Но может быть и так,что в строке может находиться два значения из двумерного массива.Если не трудно,помогите с реализацией этой части.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2010, 23:17     Поменять местами строки в массиве
Посмотрите здесь:

В двумерном массиве A[N][M] поменять местами строки,в которых сумма элементов максимальна и минимальна. C++
Поменять местами столбцы в массиве C++
C++ Поменять местами элементы в массиве
C++ Поменять местами столбцы в массиве
C++ В двухмерном массиве целых чисел поменять местами строки, симметричные относительно середины массива
Поменять местами строки в двумерном массиве C++
C++ В двумерном массиве размерностью nxm поменять местами минимальный и максимальный элементы каждой строки
Функция и двухмерный массив (Поменять в массиве местами строки) C++
В двумерном массиве поменять местами максимальный и минимальный элемент местами C++
C++ Поменять местами элементы в массиве
C++ Поменять местами строки в массиве структурных переменных
C++ Поменять элементы местами в массиве

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.11.2010, 23:30     Поменять местами строки в массиве #2
Код
    запустить цикл для всех элементов первой строки
        создать временный элемент, присвоить ему значение элемента первой строки
        элементу первой строки присвоить значение элемента второй строки
        элементу второй строки присвоить значение временного элемента
ol4ik
 Аватар для ol4ik
22 / 21 / 6
Регистрация: 08.04.2010
Сообщений: 90
16.11.2010, 23:45  [ТС]     Поменять местами строки в массиве #3
accept, я отчаянно пыталась понять, что Вы этим сказать хотели, но до меня так и не дошло О_о
silent_1991
Эксперт C++
4947 / 3023 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.11.2010, 04:44     Поменять местами строки в массиве #4
Вам надо к массиву применить обычную пузырьковую сортировку с двумя нюансами:
1. В обычном пузырьке сравниваются два соседних элемента массива (т.е. if (a[i - 1] > a[i])), вам же надо написать функцию поиска минимума в строке двумерного массива и сравнивать как if (min(a[i - 1] > min(a[i]))).
2. В пузырьке происходит обмен элементов массива обычным, всем известным способом, через темповую переменную. Вам же надо написать функцию, которая обменивает элементы двух строк массива (по сути тот же способ, через темп, но запускается в цикле для всех элементов строки) и в самом пузырьке вместо обмена элементов массива между собой вызывать эту функцию.

Добавлено через 17 минут
В общем-то вот...

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 <iomanip>
 
double min(double *a, int M);
void swap(double *a1, double *a2, int M);
void sort(double **matrix, int N, int M);
 
int main()
{
    double **matrix;
    int N, M;
 
    std::cout << "Enter N: ";
    std::cin >> N;
    std::cout << "Enter M: ";
    std::cin >> M;
 
    matrix = new double *[N];
 
    for (int i = 0; i < N; i++)
        matrix[i] = new double [M];
    
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            std::cout << "matrix[" << i << "][" << j << "] = ";
            std::cin >> matrix[i][j];
        }
    }
 
    std::cout << std::endl << std::endl << "Before sorting:" << std::endl << std::endl;
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
            std::cout << std::setw(3) << matrix[i][j] << " ";
 
        std::cout << std::endl;
    }
 
    sort(matrix, N, M);
 
    std::cout << std::endl << std::endl << "After sorting:" << std::endl << std::endl;
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
            std::cout << std::setw(3) << matrix[i][j] << " ";
 
        std::cout << std::endl;
    }
 
    for (int i = 0; i < N; i++)
        delete [] matrix[i];
 
    delete [] matrix;
 
    std::cin.get();
    return 0;
}
 
double min(double *a, int M)
{
    double m = a[0];
 
    for (int i = 0; i < M; i++)
        if (m > a[i])
            m = a[i];
 
    return m;
}
 
void swap(double *a1, double *a2, int M)
{
    for (int i = 0; i < M; i++)
    {
        double temp = a1[i];
        a1[i] = a2[i];
        a2[i] = temp;
    }
}
 
void sort(double **matrix, int N, int M)
{
    for (int i = 0; i < N; i++)
        for (int j = N - 1; j > i; j--)
            if (min(matrix[j - 1], M) > min(matrix[j], M))
                swap(matrix[j - 1], matrix[j], M);
}
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.11.2010, 05:07     Поменять местами строки в массиве #5
Цитата Сообщение от ol4ik Посмотреть сообщение
accept, я отчаянно пыталась понять, что Вы этим сказать хотели, но до меня так и не дошло О_о
это вот ответ на это
Цитата Сообщение от ol4ik
Чтобы поменять строки в двумерном массиве местами
любые две строки можно поменять местами поэлементно, можно ещё через memcpy()
Yandex
Объявления
17.11.2010, 05:07     Поменять местами строки в массиве
Ответ Создать тему
Опции темы

Текущее время: 17:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru