Страницы

Поиск по вопросам

понедельник, 25 февраля 2019 г.

Сортировка массива в java

Java. Прошу помощи. Необходимо массив из чисел int отсортировать в возрастающем порядке с помощью определенного способа - первым шагом сравнить и обменять элементы i и i+1, где i - четное число. Вторым шагом - где i - нечетное число. Повторять пока массив не будет отсортирован. Сделать надо с помощью дополнительного метода. Пример:
Как ни делал - выдает ошибку array out of bounds.
public static void firstMethod(int[] A) { int z, j; for (j=0; j

Ответ

То, что вы описали довольно сильно похоже на сортировку пузырьком, но несколько отличается (в сортировке пузырьком предполагается проход элементов подряд, следствием чего является получение за каждую итерацию максимального/минимального элемента из просматриваемых, здесь же несколько другая формулировка, а в итоге алгоритм совсем другой). P.S. Уточните, правильно ли вы поняли формулировку, если да, то реализация sort() вам подойдет, но если это, все-таки, пузырек, то воспользуейтесь методом bubbleSort()
public class Solution { public static void main(String[] args) { int[] massive = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
System.out.print("Начальное состояние массива: "); showout(massive);
sort(massive);
System.out.print("Состояние массива после сортировки: "); showout(massive); }
/** реализует ту сортировку, которую вы описали */ private static void sort(int[] massive) { boolean isAlreadySorted; do { isAlreadySorted = sort(massive, 0) & sort(massive, 1); } while (!isAlreadySorted); }
/** при необходимости меняет местами соседние элементы массива massive начиная с позиции startIndex и далее через одну */ private static boolean sort(int[] massive, int startIndex) { boolean isAlreadySorted = true; for (int index = startIndex; index < massive.length - 1; index += 2) { if (massive[index] > massive[index + 1]) { isAlreadySorted = false; swap(massive, index, index + 1); } } return isAlreadySorted; }
/** меняет местами элементы массива massive с индексами leftIndex и rightIndex */ private static void swap(int[] massive, int leftIndex, int rightIndex) { massive[leftIndex] ^= massive[rightIndex]; massive[rightIndex] ^= massive[leftIndex]; massive[leftIndex] ^= massive[rightIndex]; }
/** выводит элементы массива на экран */ private static void showout(int[] massive) { for (int index = 0; index < massive.length - 1; ++index) { System.out.print(massive[index] + ", "); } System.out.println(massive[massive.length - 1]); }
/** обычная сортировка пузырьком */ private static void bubbleSort(int[] massive) { boolean isAlreadySorted = false; for (int i = 0; i < massive.length - 1 && !isAlreadySorted; i++) { isAlreadySorted = true; for (int j = 0; j < massive.length - i - 1; j++) { if (massive[j] > massive[j + 1]) { swap(massive, j, j + 1); isAlreadySorted = false; } } } } }

Комментариев нет:

Отправить комментарий