terranum
28 уровень
Milan

Кухня(); Второй сезон - 74/79

Пост из группы Архив info.javarush.ru
3786 участников
74. Сортировка обменами. Дана последовательность чисел а1, а2, ..., аn. Требуется переставить числа в порядке возрастания. Для этого сравниваются два соседних числа аi и ai+1. Если аi > аi+1, то делается перестановка. Так продолжается до тех пор, пока все элементы не станут расположены в порядке возрастания. Составить алгоритм сортировки, подсчитывая при этом количество перестановок.
Комментарии (9)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
terranum28 уровень, Milan
27 января 2015, 14:30
Отлично, стоит только заключать в метод, ну что-то типа такого:
public static void bubbleSort(int[] arr) {
    for (int i = 0; i < arr.length - 1; i++)
        for (int j = 0; j < arr.length - i - 1; j++)
            if (arr[j] > arr[j + 1]) {
                arr[j] ^= arr[j + 1];
                arr[j + 1] ^= arr[j];
                arr[j] ^= arr[j + 1];
            }
}
Olegator337 уровень, Одесса
28 января 2015, 01:25
ох стоит подучить логические операции, не знал что с помощью XOR менять можно, если не сложно поясни что ты сделал тут ^=, аж интересно стало, намного лучше чем создавать «пузырек», изящно
terranum28 уровень, Milan
28 января 2015, 02:18
Говорят обычно так не пишут, правильнее создавать дополнительную переменную. Вроде как это на собеседовании спрашивают.
Ну тут смотри какая логика, на сложении проще всего:
int a = 5;
int b = 7;

Надо поменять местами.
a = a + b; // a = 5 + 7 И а тепрь у нас равно 15
b = a - b; // b = 15 - 7 Ок, b уже на своем месте и равно 5
a = a - b; // a = 15 - 5 Все а теперь 7

И с операторами присваивания:
a += b;
b = a - b;
a -= b;

Попробуй с умножением! Понял схему, дальше все на автомате.
profeg18 уровень
28 января 2015, 02:45
а где подсчет кол-ва перестановок? =)
terranum28 уровень, Milan
28 января 2015, 13:37
Поймал! Есть такой баг)))
Docktor9140 уровень, Калининград
28 января 2015, 15:34
а меня порадовало 5+7=15
))))
terranum28 уровень, Milan
28 января 2015, 20:57
lol))) Я же говорю один раз понял как это работает, больше не надо)))
terranum28 уровень, Milan
28 января 2015, 20:59
Фуф я плакал)
profeg18 уровень
26 января 2015, 00:55
Пузырьковая сортировка?
int[] iArr = {2,3,4,6,89};
int count = 0; // счетчик перестановок
for (int i = 0; i < iArr.length - 1; i++)
    for (int j = 0; j < iArr.length - i - 1; j++)
        if (iArr[j] > iArr[j+1])
        {
            int temp = iArr[j];
            iArr[j] = iArr[j+1];
            iArr[j+1] = temp;
            count++;
        }