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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2022, 15:26   #11
Volcozar
Новичок
Пользователь
 
Регистрация: 04.05.2022
Сообщений: 10
По умолчанию

внутренний цикл сравнивает по порядку каждый элемент с последующим и сдвигает большее число вправо, а меньшее в лево. а наружный цикл повторяет эти действия что-бы меньшие элементы сдвигались дальше влево, до тех пор пока массив не упорядочится.
Вроде все логично. я даже расписал этот алготим вручную на бумаге в числах и массив упорядочился. Но вот результат в JVM почему-то отличается. не могу понять почему.
Volcozar вне форума Ответить с цитированием
Старый 04.05.2022, 15:33   #12
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Цитата:
Сообщение от Volcozar Посмотреть сообщение
внутренний цикл сравнивает по порядку каждый элемент с последующим
но сравниваете по внешнему индексу

Цитата:
Сообщение от Volcozar Посмотреть сообщение
Но вот результат в JVM почему-то отличается. не могу понять почему.
Начните с правильного вывода... Вы ведь выводите 0й, 1й, ... элементы на 0й, 1й, ... итерации.
ForenLi вне форума Ответить с цитированием
Старый 04.05.2022, 15:43   #13
Volcozar
Новичок
Пользователь
 
Регистрация: 04.05.2022
Сообщений: 10
По умолчанию

исправил индекс:

int[] arr = new int[] {1, 6, 3, 4, 2};
for (int i=0; i<5; i++){
for(int j=0; j<5-1; j++){
if (arr[j] > arr[j+1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
System.out.print(arr[i] + " ");
}

Результат сортировки:
1 3 3 4 6
Process finished with exit code 0
Volcozar вне форума Ответить с цитированием
Старый 04.05.2022, 15:46   #14
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Давать результаты скриншотом - плохая идея. Кому охота слепить глаза, разбирая ошибки.
Моё предложение избавляет алгоритм от ненужной работы - зачем просматривать уже упорядоченные пары. Но он не устраняет автоматически все допущенные ошибки.
не 5-1, а 5-i. И вообще, чисел 5 начиная с нулевого, значит, внешний цикл д.быть
Код:
for (int i=0; i<4; i++)
(на первом проходе сравнивае от [0 с 1[ до [3 с 4], на втором от [0 с 1] до [2 с 3] и т.д. )

Последний раз редактировалось digitalis; 04.05.2022 в 15:55.
digitalis вне форума Ответить с цитированием
Старый 04.05.2022, 15:50   #15
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Моё предложение избавляет алгоритм от ненужной работы - зачем просматривать уже упорядоченные пары.
Ну не надо так сразу... Вы еще про пузырьковую сортировку начните. Отпугнете от ИТ.
ForenLi вне форума Ответить с цитированием
Старый 04.05.2022, 15:57   #16
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Дык это же она, родимая, и есть
digitalis вне форума Ответить с цитированием
Старый 04.05.2022, 16:01   #17
Volcozar
Новичок
Пользователь
 
Регистрация: 04.05.2022
Сообщений: 10
По умолчанию

Не отпугнете, а подстегнете. я уже перечитал все эти статьи и про пузырьковый метод и про перебор элементов и даже моя жена подсказала еще один вариант. но ни чего не работает, чтобы я не применял )))) весь день вожусь. а некоторые алгоритмы еще и каждый раз разные результаты выдают.
не знаю в чем причина.
В любом случае, большое спасибо за подсказки. Сегодня уже буду спать, а завтра снова буду штурмовать сортировку массивов ))))
самое смешное что в когда еще в инсте учился, то легко щелкал такие задачки на паскале. а сейчас просто не могу сообразить где ошибаюсь (((
Volcozar вне форума Ответить с цитированием
Старый 04.05.2022, 16:03   #18
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Вы мой пост так до конца и не дочитали?
ForenLi вне форума Ответить с цитированием
Старый 04.05.2022, 17:32   #19
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Чудес на свете не бывает. Вот на том же Плоскале, точнее - Лазарусе - всё работает как надо.
Код:
procedure TForm1.Memo1Click(Sender: TObject);
  var i,j,t: integer; 
begin
  for i := 0 to 4 do Memo1.Lines.Add(IntToStr(m[i]));
  Memo1.Lines.Add('==');
  for i := 0 to 3 do
    for j := 0 to 3-i do
      if m[j] > m[j+1] then
        begin
           t := m[j] ;
           m[j] := m[j+1] ;
           m[j+1] := t
        end;
  for i := 0 to 4 do Memo1.Lines.Add(IntToStr(m[i]));
end;
1
6
3
4
2
==
1
2
3
4
6
digitalis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка массива JAVA только профессионалы. Volcozar Общие вопросы по программированию, компьютерный форум 3 04.05.2022 11:26
Пирамидальная сортировка на Java SergejBrovkin Общие вопросы по Java, Java SE, Kotlin 0 11.01.2019 09:29
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
Сортировка двумерного массива Java. Тёма Сашко Помощь студентам 7 21.02.2010 19:00