Странная и даже сортировка - это более индивидуальная сортировка. Основная идея состоит в том, чтобы организовать нечетные последовательности в одном порядке, даже последовательности в одном порядке, затем нечетные последовательности в другом и даже последовательности в одном порядке, пока все не будут упорядочены.
Давайте приведем пример,
Массив для отсортирования
[6 2 4 1 5 9]
В первый раз, сравнивая нечетную последовательность, нечетная последовательность сравнивается с ее соседями даже последовательности, такими как 6 и 2, 4 и 1, 5 и 9
[6 2 4 1 5 9]
После обмена это становится
[2 6 1 4 5 9]
Второе сравнение четных чисел составляет 6 и 1, а 5 и 5 -
[2 6 1 4 5 9]
После обмена это становится
[2 1 6 4 5 9]
Третья поездка - нечетное число, и 2, 6 и 5 выбраны для сравнения с их соседними столбцами соответственно.
[2 1 6 4 5 9]
После обмена
[1 2 4 6 5 9]
Четвертый ровный пронумерованный сериал
[1 2 4 6 5 9]
Один обмен
[1 2 4 5 6 9]
Реализация Java:
static void addevensort (int [] ary) {// паритет сортировка логического флага = true; while (flag) {boolean add = false, даже = false; for (int i = 0; i <ary.length - 1; i + = 2) {if (ary [i]> ary [i + 1]) {ary [i] = ary [i + 1] + 0 * (ary [i + 1] = ary [i]); add = true; }} для (int i = 1; i <ary.length - 1; i + = 2) {if (ary [i]> ary [i + 1]) {ary [i] = ary [i + 1] + 0 * (ary [i + 1] = ary [i]); даже = правда; }} flag = нечетное || даже; // Если неверно, это означает, что независимо от того, имеет ли нечетное или даже последовательность, нет сравнения, которое соответствует условиям}} Вышеупомянутый флаг = нечетный || даже; Имеет истину, указывая на то, что он все еще меняет. В конце концов, флаг ложный только в том случае, если все ложны.
Переписывая его в flag = add && evel; Если есть ложь, общий цикл больше не будет завершен. Как сортировка пузырьков, это может уменьшить последнюю внутреннюю петлю.