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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.79
ol4ik
22 / 21 / 6
Регистрация: 08.04.2010
Сообщений: 90
#1

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

16.11.2010, 23:17. Просмотров 4996. Ответов 4
Метки нет (Все метки)

Дана матрица размера M x N. Поменять местами ее строки так, чтобы их минимальные элементы образовывали возрастающую последовательность.

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

Поменять местами строки в двумерном массиве - C++
Пользователь вводит элементы двумерного массива. Необходимо поменять местами две строки, индексы которых также вводятся с клавиатуры и...

Поменять местами строки в массиве структурных переменных - C++
A- массив структурных переменных. Нужно поменять местами строки A и A struct Q { int N; char H; }; int main() ...

Функция и двухмерный массив (Поменять в массиве местами строки) - C++
Дан массив действительных чисел размера m на n, где m и n – натуральные числа. Поменять в массиве местами строку с наибольшим и строку с...

В двумерном массиве A[N][M] поменять местами строки,в которых сумма элементов максимальна и минимальна. - C++
Помогите пожалуйста..

В двухмерном массиве целых чисел поменять местами строки, симметричные относительно середины массива - C++
В двухмерном массиве целых чисел поменять местами строки, симметричные относительно середины массива (горизонтальной линии)

В двумерном массиве размерностью nxm поменять местами минимальный и максимальный элементы каждой строки - C++
В двумерном массиве размерностью nxm поменять местами минимальный и максимальный элементы каждой строки.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.11.2010, 23:30 #2
Код
    запустить цикл для всех элементов первой строки
        создать временный элемент, присвоить ему значение элемента первой строки
        элементу первой строки присвоить значение элемента второй строки
        элементу второй строки присвоить значение временного элемента
0
ol4ik
22 / 21 / 6
Регистрация: 08.04.2010
Сообщений: 90
16.11.2010, 23:45  [ТС] #3
accept, я отчаянно пыталась понять, что Вы этим сказать хотели, но до меня так и не дошло О_о
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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);
}
1
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.11.2010, 05:07 #5
Цитата Сообщение от ol4ik Посмотреть сообщение
accept, я отчаянно пыталась понять, что Вы этим сказать хотели, но до меня так и не дошло О_о
это вот ответ на это
Цитата Сообщение от ol4ik
Чтобы поменять строки в двумерном массиве местами
любые две строки можно поменять местами поэлементно, можно ещё через memcpy()
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2010, 05:07
Привет! Вот еще темы с ответами:

В двумерном массиве поменять местами максимальный и минимальный элемент местами - C++
Написать фрагмент программы для решения следующей задачи.В двумерном массиве поменять местами максимальный и минимальный элемент местами....

Поменять местами столбцы в массиве - C++
В массиве a поменять местами 1 и 3 столбец. Исходный и получившийся массив вывести в виде матрицы. Заранее спасибо.

Поменять элементы местами в массиве - C++
swap (myArray,myArray); swap (myArray,myArray); swap (myArray,myArray); Это пытался привести через цикл. Подскажите где...

Поменять местами элементы в массиве - C++
Даны действительные числа х1, …, хn (все числа попарно различны). Поменять местами наибольший и наименьший элементы.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.11.2010, 05:07
Ответ Создать тему
Опции темы

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