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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.67
Glam_Man
6 / 6 / 0
Регистрация: 15.10.2011
Сообщений: 73
#1

Необходимо отсортировать определённые столбцы матрицы по возрастанию - C++

04.12.2011, 17:46. Просмотров 3316. Ответов 2
Метки нет (Все метки)

Нужно каждый столбец с чётным номером отсортировать по возрастанию. Для примера дана матрица:

1 2 3 4
4 1 2 3
3 4 1 2

На выводе должна быть матрица:

1 1 3 2
4 2 2 3
3 4 1 4

Пытался переделать код, взятый отсюда http://www.cyberforum.ru/cpp-beginne...ml#post2198956

Вот, к чему это привело:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int temp=0;
     //Цикл по столбцам
     for (int j=1; j<m; j+=2)
     {       
           //Цикл по элементам столбца
          for (int i=0; i<n-j; i++)
          {     
               if (b[i][j]>b[i][j+1])
               {     
                    temp=b[i][j];           
                    b[i][j]=b[i][j+1];    
                    b[i][j+1]=temp;
               }
          }
     }
Программа выдаёт неверный результат. В чём ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2011, 17:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Необходимо отсортировать определённые столбцы матрицы по возрастанию (C++):

Необходимо отсортировать определённые столбцы матрицы по возрастанию и по убыванию - C++
Нужно каждый столбец с чётным номером отсортировать по возрастанию и по убыванию. Для примера дана матрица: 3 2 3 3 4 6 2 7 2 4 1...

Отсортировать столбцы матрицы по не возрастанию суммы их элементов - C++
5) Дана матрица x &lt;= 15.Розробиты программу преобразования заданной матрицы так чтобы суммы элементов столбцов образовывали невозрастающая...

Отсортировать столбцы матрицы по возрастанию суммы элементов столбцов - C++
Помогите найти ошибку! Почему-то не работает.. Дано двумерный массив. Разместить его столбцы таким образом, чтобы суммы значений...

Отсортировать чётные столбцы матрицы по возрастанию, а нечётные – по убыванию - C++
Нужно: Отсортировать чётные столбцы матрицы по возрастанию, а нечётные – по убыванию. Помогите пожалуйста кто-нибудь!

Как отсортировать столбцы двумерного массива по возрастанию (по сумме столбцов)? - C++
Не понимаю, алгоритма сортировки, пожалуйста помогите

Отсортировать нечетные столбцы массива по возрастанию суммы элементов этих столбцов - C++
:(Отсортировать нечетные столбцы массива по возрастанию суммы элементов этих столбцов

2
Smillles7
25 / 25 / 1
Регистрация: 23.04.2011
Сообщений: 130
04.12.2011, 19:08 #2
Цикл сортировки по столбцам проходит только 1 раз...... мало....
0
Glam_Man
6 / 6 / 0
Регистрация: 15.10.2011
Сообщений: 73
04.12.2011, 20:15  [ТС] #3
Подправил немного код. Но всё равно не правильно работает: сравнивает только по 2 первых элемента каждого второго столбца...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int temp=0;
     for (int i=1; i<m; i+=2)
     {
         //каждый второй столбец
         for (int j=0; j<n; j++)
         {
             //проходим n раз
             for (int l=0; l<(n-1); l++)
             {
                 //сравнивая каждый элемент со следующим в столбце
                 if (b[i][l]<b[i+1][l])
                 {
                     //и если следующий элемент меньше предыдущего, меняем их местами
                     temp=b[i][l];
                     b[i][l]=b[i+1][l];
                     b[i+1][l]=temp;
                 }
             }
         }
     }
Цикл сортировки по столбцам проходит только 1 раз...... мало....
Он проходит по чётным номерам столбцов, первый раз проходит для второго стоблца, после каждой итерации счётчик увеличивается на 2, потому следующая итерация будет уже не для второго, а для четвёртого стоблца (если таковой существует, если же нет, то перед второй итерацией цикла при сравнении i=3 с количеством столбцов, равным к примеру 3 сравнение будет не истино (3<3 неверно))

Добавлено через 59 минут
Всё, разобрался. Прочитал на википедии про метод пузырька, осмыслил. Код должен был выглядеть так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int temp=0;
     for (int i=1; i<m; i+=2)
     {
         bool NeedToSort=1;
         while (NeedToSort)
         {
            NeedToSort=0;
            //каждый второй столбец проходим n раз
            for (int l=0; l<(n-1); l++)
            {
                //сравнивая каждый элемент со следующим в столбце
                if (b[l][i]>b[l+1][i])
                {
                    //и если следующий элемент столбца меньше предыдущего, меняем их местами
                    temp=b[l][i];
                    b[l][i]=b[l+1][i];
                    b[l+1][i]=temp;
                    NeedToSort=1;
                }
            }
         }
     }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2011, 20:15
Привет! Вот еще темы с ответами:

Элементы массива с нечетных позиций необходимо отсортировать по возрастанию, с четных - по убыванию - C++
Значит есть одномерный массив из 10 чисел. Заполнен случайными значениями. Числа расположенные на нечетных позициях необходимо...

Поставить столбцы матрицы по возрастанию - C++
B матрице С переставить столбцы по возрастанию сумм столбцов матрицы . Не знаю как решить, прощу помощи.

Отсортировать столбцы матрицы методом пузырька - C++
Помогите, пожалуйста, найти ошибку. Дана матрица n*n. Каждый столбец матрицы с номером 2i по убыванию элементов, а с номаром 2i+1 по...

Отсортировать столбцы матрицы методом вставки - C++
void Matrix::Sort_Matrix() { for (int k=0; k&lt;Col; ++k) { for (int i = 1,j; i&lt;Row; i++) { int tmp = Numbers ...


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

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

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