А вам не кажется, что тут есть лишние движения?
1. Первый цикл можно закончить прогонять на предпоследнем элементе, то есть i < array.length - 1.
2. Второй цикл можно начать с int j = i + 1. Иначе при int j = i мы на первом шаге сравниваем число с самим собой.
Это ваше решение:
public static void sort(int[] array) {
for (int i = 0; i < array.length; i++) {
for (int j = i; j < array.length; j++) {
if (array[i] > array[j]) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
То есть вот эта сортировка работает, решение прошло валидацию:
public static void sort(int[] a){
for (int i = 0; i < a.length - 1; i++) {
for (int j = i + 1; j < a.length; j++) {
if (a[i] > a[j]){
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
}
Или это мелочи?
Neonila Kravtcova
19 уровень
Вопрос по правильному решению
Решен
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Neonila Kravtcova
12 ноября 2021, 21:04
Ксения, Дмитрий, спасибо, что откликнулись! Я с удовольствием почитала вашу дискуссию )) Конечно, я хочу применять оптимизацию там, где это возможно. Про флажок отличная информация, взяла на карандаш, и решила поплотнее ознакомться с возможными видами сортировок - вы меня мотивировали! )) И у меня, похоже, не совсем пузырёк.. Всем отличных выходных!
0
Ksenia VolkovaJava Developer в DXCMaster
12 ноября 2021, 11:32
Это мелочи.
Но если уж заниматься оптимизацией, то можно добавить boolean-флаг isSorted, чтобы заканчивать сортировку, если if не сработал ни разу за проход внутреннего цикла.
(Например, если массив изначально был отсортирован или очень близок к тому).
+1
Дмитрий КаменщиковSystem Engineer в Перформанс Лаб
12 ноября 2021, 15:14
Флаг можно применить для пузырьковой сортировки, сравнивающая два соседних элемента, а для данной сортировки это не подходит
0
Ksenia VolkovaJava Developer в DXCMaster
12 ноября 2021, 15:24
Кто сказал?
Классический оптимизированный пузырек:
0
Дмитрий КаменщиковSystem Engineer в Перформанс Лаб
12 ноября 2021, 15:32
Так все правильно я написал, пузырьковая в которой сравниваются два соседних элемента, а в коде из вопроса, сравнивается текущий элемент со всеми оставшимися и если он меньше, то они меняются местами
и куда вы хотите флаг воткнуть!?? )))
0
Ksenia VolkovaJava Developer в DXCMaster
12 ноября 2021, 15:42
Во-первых, очень удобно редактировать комментарий, а потом делать вид, что там не было написано про сортировку вставками.
Во-вторых - пожалуйста
0
Дмитрий КаменщиковSystem Engineer в Перформанс Лаб
12 ноября 2021, 15:53
Так сразу исправил свою опечатку, а не через день! И попробуй отсортировать своим методом
результат
[-5, 4, 4, 4, 1]
0
Ksenia VolkovaJava Developer в DXCMaster
12 ноября 2021, 16:32
Для тебя это "сразу", а я уже ответ написать успела.
Пузырек-таки оптимизируется через флаг - о чем и была речь.
А что касается кода ТС, то оптимизация за счет +1/-1 в цикле почти ничего не дает. Поэтому если есть цель ускорить сортировку, то лучше менять порядок перебора.
0
Дмитрий КаменщиковSystem Engineer в Перформанс Лаб
12 ноября 2021, 17:43
Про пузырек спора нет! С тобой согласен на все 100% что "Ускоряет", а вот к данной задаче, твой флажок не применить, если только не поменять код на другой вид сортировки.
0
Дмитрий КаменщиковSystem Engineer в Перформанс Лаб
12 ноября 2021, 11:31
Данная сортировка похоже на пузырьковую, а так вывод правильный, в верхнем коде есть лишние шаги, и их исполнение не обязательно
+1