в таком решении цикл прогоняется 20 (длинна массива) раз. При этом в каждом прогоне делается попытка переместить число в конец массива?
public static void sort(int[] array) {
// int a[] = new int[array.length];
//int b=a[0];
for (int i = 0; i < array.length; i++)
for (int j = 0; j < array.length-1; j++)
if (array[j] < array[j + 1])
{
int a = array[j];
array[j] = array[j+1];
array[j+1] = a;
}
}
Как можно оптимизировать, чтобы число прогонов было минимальным?
Andrei Pilipuk
31 уровень
Оптимизация пузыря?
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Roman Pryshchepa Java Developer Expert
31 мая 2018, 08:32
1) У тебя за первый проход самый маленький элемент будет в конце массива, значит следующий проход можно делать не до конца и т.д.
2) Вводится флаг, который отвечает за то, была ли хоть одна перестановка за текущий прогон, если ее не было, значит все отсортировано и нет смысла продолжать.
+2
Andrei Pilipuk
31 мая 2018, 09:22
Это я как раз понимаю. Вопрос, как в коде это реализовать?
1. Как записать, чтобы каждый следующий проход шел не до конца? Ввести какой то счетчик, значение которого записать в проверку: for (int j =0, j<array.length-1-"счетчик"; j++). ТАК?
2. тут нужно через цикл if (false) else (true)? это я нашел.
0
Roman Pryshchepa Java Developer Expert
31 мая 2018, 10:25
1. Да, счетчик. Вводить не обязательно, он у тебя и так есть во внешнем цикле.
0