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

Сортировка главной диагонали двумерного массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.61
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
09.12.2010, 17:16     Сортировка главной диагонали двумерного массива #1
Всем привет.
Решаю задачу столкнулся с проблемой:
Не могу отсортировать главную диагональ двумрного массива( матрицы ) по возрастанию/убыванию.
Не могу не так не так. Видимо не знаю какого-то метода, принципа.
Вот моя попытка.
C++
1
2
3
4
5
6
7
8
    for(int i = 0; i < line; i++) {
        if( matr[i-1][i-1] > matr[i][i] ) {
            //tmp = larger;
            tmp = matr[i][i];
            matr[i][i] = matr[i-1][i-1];
            matr[i-1][i-1] = tmp;
        }
    }
так не получается? как написать правильный алгоритм для сортировки главной диагонали двумерного массива по убыванию/возрастанию?

Добавлено через 8 минут
Помню на лекциях был метод пузырьком.
Попробовал применить его - не получается. Какие то проблемы?

C++
1
2
3
4
5
6
7
8
9
10
11
12
    int dummy;
    for(int i = 0; i < line; i++) {
        for(int j = line - 1; j > i; j--) {
            if(matr[j-1][j-1] > matr[j][j]) {
 
            dummy = matr[j - 1][j - 1];
            matr[j][j] = matr[j - 1][j - 1];
            matr[j - 1][j - 1] = dummy;
            
            }
        }
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2010, 17:16     Сортировка главной диагонали двумерного массива
Посмотрите здесь:

C++ Вычислить сумму элементов главной диагонали двумерного массива
Сколько элементов двумерного массива меньше любого элемента на главной диагонали C++
C++ Определить сколько элементов двумерного массива больше любого элемента на главной диагонали
Отражение двумерного массива относительно главной диагонали C++
C++ Разработать функцию зануления главной диагонали двумерного массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
11.12.2010, 00:46  [ТС]     Сортировка главной диагонали двумерного массива #2
Дак что? Есть какие то идеи? или я неверно что-то объяснил?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.12.2010, 00:47     Сортировка главной диагонали двумерного массива #3
C++
1
2
3
4
5
6
7
8
        for(int i = 1; i < line; i++) {
                if( matr[i-1][i-1] > matr[i][i] ) {
                        //tmp = larger;
                        tmp = matr[i][i];
                        matr[i][i] = matr[i-1][i-1];
                        matr[i-1][i-1] = tmp;
                }
        }
м?
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
13.12.2010, 17:20  [ТС]     Сортировка главной диагонали двумерного массива #4
Нет не получилось. В матрице 5 на 5 меняются только 3 и 4 элемент почему то

Написал мою версию. Все работает.

C++
1
2
3
4
5
6
7
8
9
10
 //сортировка на главной диагонали
 int tmp;
 for(int i = 1; i < line; i++) {
  for(int i = 1; i < line; i++) {
               if( matr[i-1][i-1] > matr[i][i] ) {
    tmp = matr[i][i];
    matr[i][i] = matr[i-1][i-1];
    matr[i-1][i-1] = tmp;
   }
  }
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
13.12.2010, 17:38     Сортировка главной диагонали двумерного массива #5
VladSharikov,
C++
1
2
for(int i = 1; i < line; i++) {
  for(int i = 1; i < line; i++) {
А теперь вопрос как это работает и даже если работает перекрывая первую переменную цикла, то как оно работает верно?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
13.12.2010, 17:59     Сортировка главной диагонали двумерного массива #6
ForEveR, Вобщем VladSharikov сейчас прав.

Цитата Сообщение от ForEveR Посмотреть сообщение
for(int i = 1; i < line; i++) {
if( matr[i-1][i-1] > matr[i][i] ) {
//tmp = larger;
tmp = matr[i][i];
matr[i][i] = matr[i-1][i-1];
matr[i-1][i-1] = tmp;
}
}
Это по смыслу сортировка пузырьком и эта сортировка за один проход не делается.
А у него получается сортировка пузырьком с перекрытием (больше сравнений чем нужно) - и видимо i внутренняя получается перкрывает внешнюю.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
13.12.2010, 18:02     Сортировка главной диагонали двумерного массива #7
valeriikozlov, Не, это я понимаю. Ну хотя бы j что-ли написать бы... Я такой код написал только потому, что не всматривался ни в задание ни во что, а просто исправил очевидную ошибку.
C++
1
2
for(int i = 0; i < line; i++)
                if( matr[i-1][i-1] > matr[i][i] )
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
13.12.2010, 18:04     Сортировка главной диагонали двумерного массива #8
ForEveR, понятно. я вообще-то тоже бы писал вторую переменную j.
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
13.12.2010, 19:36  [ТС]     Сортировка главной диагонали двумерного массива #9
Да на счет ошибки
она заключается в

C++
1
i = 0
?

На счет второй переменной у препода мнение - ибо главная диагональ и i = j можно не запариваться на счет второй переменной. Я тоже думал что надо бы вторую.

Можно уточнить - почему с 1 а не с 0?
мы ведь matr[0][0] ничего не присваиваем?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
13.12.2010, 19:45     Сортировка главной диагонали двумерного массива #10
C++
1
if( matr[i-1][i-1] > matr[i][i] )
Разве? Если начинать цикл с нуля выйдет за пределы. Ибо при первом же проходе будет
if(matr[-1][-1] > matr[0][0])
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2010, 20:34     Сортировка главной диагонали двумерного массива
Еще ссылки по теме:

C++ Сумма элементов главной диагонали двумерного массива(матрицы)
Найти сумму элементов главной диагонали двумерного массива C++
Определить, сколько элементов двумерного массива больше любого элемента на главной диагонали C++

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

Или воспользуйтесь поиском по форуму:
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
13.12.2010, 20:34  [ТС]     Сортировка главной диагонали двумерного массива #11
Понял спасибо. В любом случае ошибка была исправлена - но исправлена по привычке )

Возможно вы ответите на вопрос:
Почему при объявлении матрицы с одновременной инициализацией первые скобки можно оставить пустыми, а вторые нет?
Yandex
Объявления
13.12.2010, 20:34     Сортировка главной диагонали двумерного массива
Ответ Создать тему
Опции темы

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