Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2018, 12:07   #1
Fillimon
Пользователь
 
Регистрация: 16.04.2018
Сообщений: 13
По умолчанию Помогите найти ошибку (сортировка 2-мерного массива вставками)

Здравствуйте. Решил самостоятельно освоить Java и пока делаю только первые шаги. Чтобы сильнее вникнуть в язык, мне посоветовали попробовать реализовать сортировку вставками над 2-мерным массивом.

Я заполнил массив случайными значениями, и написал сам алгоритм, долго ломал голову над индексами массива, но думал что справился, однако при тестах выявилось, что почему-то сортируются не все числа. То тут то там выскакивают самозванцы, помогите найти ошибку! (код с комментариями приложен ниже)

Код:
   A = new int[n][n]; //матрица А размера n*n

    boolean flag;        //переменная выхода из циклов
    for(int i = 0; i < n; i++) {
        for (int j = 0; j < n; j ++) {
            flag = false;     //ставим начальное значение переменной выхода
            int currentNumber = A[i][j];   //сохраняем значение следующего элемента матрицы во вспомогательной переменной
            for(int k = 0; k <= i; k++){                 //пробегаем по всем предыдущим
                for (int l = 0; l<= j; l++){             //элементам матрицы и
                    if (currentNumber > A[k][l]){        //сравниваем с "currentNumber"
                        int m = i;           //Затем, заводим 4 вспомогательные переменные, где
                        int s = j;           // "m" и "s" индексы "предыдущего элемента матрицы",
                        int iI = i;          //  а "iI" и "jJ" индексы "текущего"
                        int jJ = j;          //  ( i и j - индексы нашего currentNumber )
                        while(A[k][l] != currentNumber){   //пока элемент оказавшийся меньше currentNumber
                                                                         // не станет равен ему повторяем:
                            if ((s == 0)&&(m != 0)) {m--; s = n-1;}    //т.к. массив двумерный делаем так,
                            else s--;                //чтобы при уменьшении индексации не выходило за пределы массива.
                            A[iI][jJ]=A[m][s];      //таким образом "следующему" элементу даём значение "предыдущего"
                            iI = m;                 //переназначаем переменные "предыдущего" элемента на "текущий"
                            jJ = s;
                            if ((k == m)&&(s == l)) { //и если мы переместили уже то число, чтобыло меньше, чем currentNumber
                                A[k][l] = currentNumber;  //присваиваем элементу значение currentNumber
                                flag = true;    //устанавливаем флаг выхода,
                                // чтобы не переписывать остальные отсортированные элементы
                            }
                        }
                    }
                    if(flag) break;   //закрываем вложенные циклы
                }
                if(flag) break;  //и если мы прошли ещё не всю матрицу, возвращаемся в первые 2 цикла
            }
        }
    }
Fillimon вне форума Ответить с цитированием
Старый 21.09.2018, 12:16   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Начнем с простых вопросов: что такое сортировка двумерного массива? какой на ни порядок?
p51x вне форума Ответить с цитированием
Старый 21.09.2018, 12:57   #3
Fillimon
Пользователь
 
Регистрация: 16.04.2018
Сообщений: 13
По умолчанию

Ах да, забыл))) Сортировка элементов массива по убыванию. От элемента массива А[0][0], А[0][1] и т.д. до A[n][n], где в A[0][0] находится самое большое число, а в A[n][n] самое маленькое
Fillimon вне форума Ответить с цитированием
Старый 23.09.2018, 11:59   #4
Fillimon
Пользователь
 
Регистрация: 16.04.2018
Сообщений: 13
По умолчанию

Всем спасибо за помощь, вы были очень отзывчивы, всё починил, только благодаря вашим советам, вот рабочий код программы.
"Сортировка двумерного массива вставками по не возрастанию"
Код:
    int help = 0;
    boolean flag;
    for(int i = 0; i < n; i++) {
        for (int j = 0; j < n; j ++) {
            flag = false;
            int currentNumber = A[i][j];
            for(int k = 0; k <= i; k++){
                for (int l = 0; l<= help; l++){
                    if (k == i) help = j;
                    else help = n-1;
                    if (currentNumber > A[k][l]){
                        int m = i;
                        int s = j;
                        int iI = i;
                        int jJ = j;
                        while(A[k][l] != currentNumber){
                            if ((s == 0)&&(m != 0)) {m--; s = n-1;}
                            else s--;
                            A[iI][jJ]=A[m][s];
                            iI = m;
                            jJ = s;
                            if ((k == m)&&(s == l)) {
                                A[k][l] = currentNumber;
                                flag = true;
                            }
                        }
                    }
                    if(flag) break;
                }
                if(flag) break;
            }
        }
    }
Fillimon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка двумерного массива. Не могу найти ошибку Annushka19 Общие вопросы по Java, Java SE, Kotlin 1 06.11.2013 22:51
Сортировка одномерного массива. Паскаль. Не найти ошибку, Буду благодарна) ТатьянаЧернышева Помощь студентам 2 01.12.2011 22:06
Сортировка массива простыми вставками на Delphi Алексей777911 Помощь студентам 3 21.04.2010 18:31
Сортировка вставками двухмерного массива ponchikpk Помощь студентам 6 09.03.2009 13:34
Сортировка строк 2-мерного массива Mayday_007 Помощь студентам 1 04.04.2008 09:26