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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.67
Glam_Man
6 / 6 / 0
Регистрация: 15.10.2011
Сообщений: 73
04.12.2011, 17:46     Необходимо отсортировать определённые столбцы матрицы по возрастанию #1
Нужно каждый столбец с чётным номером отсортировать по возрастанию. Для примера дана матрица:

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;
               }
          }
     }
Программа выдаёт неверный результат. В чём ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2011, 17:46     Необходимо отсортировать определённые столбцы матрицы по возрастанию
Посмотрите здесь:

C++ Отсортировать столбцы матрицы методом пузырька
Отсортировать чётные столбцы матрицы по возрастанию, а нечётные – по убыванию C++
Отсортировать нечетные столбцы массива по возрастанию суммы элементов этих столбцов C++
C++ Отсортировать столбцы матрицы методом вставки
C++ Упорядочить столбцы матрицы по возрастанию элементов
C++ Поставить столбцы матрицы по возрастанию
Элементы массива с нечетных позиций необходимо отсортировать по возрастанию, с четных - по убыванию C++
Отсортировать столбцы матрицы по не возрастанию суммы их элементов C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Smillles7
25 / 25 / 1
Регистрация: 23.04.2011
Сообщений: 130
04.12.2011, 19:08     Необходимо отсортировать определённые столбцы матрицы по возрастанию #2
Цикл сортировки по столбцам проходит только 1 раз...... мало....
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;
                }
            }
         }
     }
Yandex
Объявления
04.12.2011, 20:15     Необходимо отсортировать определённые столбцы матрицы по возрастанию
Ответ Создать тему
Опции темы

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