Как проверить, отсортирован ли массив на Java

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять, отсортирован ли массив чисел на Java. Мы рассмотрим фундаментальный концепт сравнения соседних элементов, который является ключевой идеей многих алгоритмов сортировки. Вы узнаете, как проверять как по возрастанию, так и по убыванию, а также как обрабатывать случаи, когда элементы равны. К концу этого практического занятия вы будете хорошо понимать логику, необходимую для определения, отсортирован ли массив.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java/BasicSyntaxGroup -.-> java/operators("Operators") java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/DataStructuresGroup -.-> java/sorting("Sorting") subgraph Lab Skills java/operators -.-> lab-560004{{"Как проверить, отсортирован ли массив на Java"}} java/if_else -.-> lab-560004{{"Как проверить, отсортирован ли массив на Java"}} java/sorting -.-> lab-560004{{"Как проверить, отсортирован ли массив на Java"}} end

Сравнение соседних элементов для сортировки

На этом этапе мы начнем изучать фундаментальный концепт сравнения соседних элементов, который является ключевой идеей многих алгоритмов сортировки. Сортировка - это процесс расположения элементов в определенном порядке, например, по возрастанию или убыванию.

Представьте, что у вас есть список чисел, и вы хотите отсортировать их от наименьшего к наибольшему. Простой способ начать - это посмотреть на два соседних числа и решить, какое из них должно идти первым.

Давайте создадим простую программу на Java, чтобы продемонстрировать эту идею. Мы создадим класс, который сравнивает два числа.

  1. Откройте файл HelloJava.java в редакторе WebIDE, если он еще открыт. Мы будем изменять этот файл для нашей новой программы.

  2. Замените все содержимое файла следующим кодом:

    public class CompareNumbers {
        public static void main(String[] args) {
            int number1 = 15;
            int number2 = 10;
    
            System.out.println("Comparing " + number1 + " and " + number2 + ":");
    
            if (number1 > number2) {
                System.out.println(number1 + " is greater than " + number2);
            } else if (number1 < number2) {
                System.out.println(number1 + " is less than " + number2);
            } else {
                System.out.println(number1 + " is equal to " + number2);
            }
        }
    }

    Давайте рассмотрим новые части этого кода:

    • public class CompareNumbers: Мы изменили имя класса на CompareNumbers, чтобы лучше отразить, что делает программа. Помните, что имя файла должно совпадать с именем класса, поэтому позже нам нужно будет переименовать файл.
    • int number1 = 15; и int number2 = 10;: Эти строки объявляют две целочисленные переменные, number1 и number2, и присваивают им начальные значения.
    • System.out.println("Comparing " + number1 + " and " + number2 + ":");: Эта строка выводит сообщение, указывающее, какие числа сравниваются.
    • if (number1 > number2): Это оператор if. Он проверяет, является ли условие в скобках (number1 > number2) истинным. Если это так, то код в фигурных скобках {} сразу после оператора if выполняется.
    • else if (number1 < number2): Это оператор else if. Если условие в операторе if было ложным, то проверяется это условие (number1 < number2). Если оно истинно, то код в его фигурных скобках выполняется.
    • else: Это оператор else. Если ни условие в if, ни в else if не были истинными, то выполняется код в блоке else.
    • System.out.println(...): Эти строки выводят сообщения на основе результата сравнения.
  3. Сохраните файл (Ctrl+S или Cmd+S).

  4. Теперь нам нужно переименовать файл, чтобы оно соответствовало новому имени класса. В терминале убедитесь, что вы находитесь в директории ~/project:

    cd ~/project
  5. Переименуйте файл с помощью команды mv:

    mv HelloJava.java CompareNumbers.java

    Эта команда перемещает (переименовывает) файл HelloJava.java в CompareNumbers.java.

  6. Теперь скомпилируйте новую программу:

    javac CompareNumbers.java

    Если компиляция прошла успешно, вы не должны увидеть никакого вывода.

  7. Наконец, запустите скомпилированную программу:

    java CompareNumbers

    Вы должны увидеть вывод, указывающий на результат сравнения:

    Comparing 15 and 10:
    15 is greater than 10

Вы успешно создали и запустили программу на Java, которая сравнивает два соседних элемента и выводит результат. Это простое сравнение является основой для более сложных алгоритмов сортировки.

Проверка на возрастание и убывание

На предыдущем этапе мы научились сравнивать два числа. Теперь давайте расширим этот подход и проверим, находятся ли пара соседних чисел в порядке возрастания или убывания. Это еще один фундаментальный концепт при изучении сортировки.

Порядок возрастания означает расположение элементов от наименьшего к наибольшему (например, 1, 5, 10). Порядок убывания означает расположение элементов от наибольшего к наименьшему (например, 10, 5, 1).

Мы изменим нашу программу CompareNumbers.java, чтобы проверить эти конкретные порядки.

  1. Откройте файл CompareNumbers.java в редакторе WebIDE.

  2. Замените существующий код следующим:

    public class CheckOrder {
        public static void main(String[] args) {
            int number1 = 15;
            int number2 = 10;
    
            System.out.println("Checking order of " + number1 + " and " + number2 + ":");
    
            if (number1 < number2) {
                System.out.println("The numbers are in ascending order.");
            } else if (number1 > number2) {
                System.out.println("The numbers are in descending order.");
            } else {
                System.out.println("The numbers are equal.");
            }
        }
    }

    Вот что мы изменили:

    • public class CheckOrder: Мы снова изменили имя класса на CheckOrder. Нам нужно будет переименовать файл, чтобы оно соответствовало новому имени класса.
    • Условие if теперь проверяет, меньше ли number1 чем number2. Если это так, значит они расположены в порядке возрастания.
    • Условие else if проверяет, больше ли number1 чем number2. Если это так, они расположены в порядке убывания.
    • Блок else обрабатывает случай, когда числа равны.
  3. Сохраните файл (Ctrl+S или Cmd+S).

  4. В терминале убедитесь, что вы находитесь в директории ~/project:

    cd ~/project
  5. Переименуйте файл, чтобы оно соответствовало новому имени класса:

    mv CompareNumbers.java CheckOrder.java
  6. Скомпилируйте измененную программу:

    javac CheckOrder.java

    Опять же, отсутствие вывода означает успешную компиляцию.

  7. Запустите программу:

    java CheckOrder

    При number1 = 15 и number2 = 10 вывод должен быть следующим:

    Checking order of 15 and 10:
    The numbers are in descending order.
  8. Давайте быстро изменим числа, чтобы увидеть случай возрастания. Откройте CheckOrder.java в редакторе и измените значения:

    public class CheckOrder {
        public static void main(String[] args) {
            int number1 = 5; // Changed from 15
            int number2 = 8; // Changed from 10
    
            System.out.println("Checking order of " + number1 + " and " + number2 + ":");
    
            if (number1 < number2) {
                System.out.println("The numbers are in ascending order.");
            } else if (number1 > number2) {
                System.out.println("The numbers are in descending order.");
            } else {
                System.out.println("The numbers are equal.");
            }
        }
    }
  9. Сохраните файл.

  10. Скомпилируйте программу снова:

    javac CheckOrder.java
  11. Запустите программу:

    java CheckOrder

    Теперь вывод должен отражать порядок возрастания:

    Checking order of 5 and 8:
    The numbers are in ascending order.

Вы успешно изменили программу, чтобы проверить, находятся ли два соседних числа в порядке возрастания или убывания. Это важный шаг в понимании того, как алгоритмы сортировки определяют правильную позицию элементов.

Обработка равных элементов

На предыдущих этапах мы сравнивали два числа и проверяли, находятся ли они в порядке возрастания или убывания. Мы также предусмотрели случай, когда числа равны. На этом этапе мы сосредоточимся именно на обработке сценария, когда соседние элементы одинаковы.

При сортировке порядок равных элементов обычно не имеет значения для итогового отсортированного результата, но важно, чтобы наша логика сравнения правильно определяла этот случай. Наша текущая программа CheckOrder.java уже обрабатывает этот случай с помощью блока else. Давайте явно протестируем этот случай.

  1. Откройте файл CheckOrder.java в редакторе WebIDE.

  2. Измените значения number1 и number2 так, чтобы они были равны:

    public class CheckOrder {
        public static void main(String[] args) {
            int number1 = 7; // Changed to 7
            int number2 = 7; // Changed to 7
    
            System.out.println("Checking order of " + number1 + " and " + number2 + ":");
    
            if (number1 < number2) {
                System.out.println("The numbers are in ascending order.");
            } else if (number1 > number2) {
                System.out.println("The numbers are in descending order.");
            } else {
                System.out.println("The numbers are equal.");
            }
        }
    }
  3. Сохраните файл (Ctrl+S или Cmd+S).

  4. В терминале убедитесь, что вы находитесь в директории ~/project:

    cd ~/project
  5. Скомпилируйте измененную программу:

    javac CheckOrder.java

    Отсутствие вывода означает успешную компиляцию.

  6. Запустите программу:

    java CheckOrder

    При установке обоих чисел равными 7 вывод должен быть следующим:

    Checking order of 7 and 7:
    The numbers are equal.

Это подтверждает, что наша программа правильно определяет, когда два соседних числа равны. Обработка этого случая важна для полноты нашей логики сравнения.

В контексте алгоритмов сортировки, когда соседние элементы равны, они уже находятся в допустимом относительном порядке (как возрастание, так и убывание могут быть считаны как истинные в зависимости от строгости, но обычно они просто считаются "равными", и не требуется обмена элементов).

Теперь вы успешно протестировали случай, когда соседние элементы равны, завершив наше исследование сравнения двух соседних чисел для целей сортировки.

Резюме

В этом практическом занятии (лабораторной работе) мы начали с изучения фундаментального концепта сравнения соседних элементов, который является ключевой идеей в алгоритмах сортировки. Мы научились создавать простую программу на Java для сравнения двух чисел и определения, является ли одно из них больше, меньше или равно другому. Это включало в себя понимание базового синтаксиса Java для объявления переменных, присваивания значений и условных операторов (if, else if, else). Мы также практиковались в изменении существующих файлов на Java и узнали о важности соответствия имени класса имени файла.

На основе концепции сравнения соседних элементов мы затем расширили наше понимание, чтобы проверить как порядок возрастания, так и порядок убывания в последовательности чисел. Это потребовало итеративного применения логики сравнения к нескольким элементам. Наконец, мы рассмотрели сценарий обработки равных элементов при проверке сортировки, убедившись, что наша логика правильно обрабатывает случаи, когда соседние элементы имеют одинаковое значение. Эти шаги дали фундаментальное понимание того, как программно определить, отсортирован ли массив на Java.