Введение
В этом практическом занятии (лабораторной работе) вы научитесь проверять, отсортирован ли массив чисел на Java. Мы рассмотрим фундаментальный концепт сравнения соседних элементов, который является ключевой идеей многих алгоритмов сортировки. Вы узнаете, как проверять как по возрастанию, так и по убыванию, а также как обрабатывать случаи, когда элементы равны. К концу этого практического занятия вы будете хорошо понимать логику, необходимую для определения, отсортирован ли массив.
Сравнение соседних элементов для сортировки
На этом этапе мы начнем изучать фундаментальный концепт сравнения соседних элементов, который является ключевой идеей многих алгоритмов сортировки. Сортировка - это процесс расположения элементов в определенном порядке, например, по возрастанию или убыванию.
Представьте, что у вас есть список чисел, и вы хотите отсортировать их от наименьшего к наибольшему. Простой способ начать - это посмотреть на два соседних числа и решить, какое из них должно идти первым.
Давайте создадим простую программу на Java, чтобы продемонстрировать эту идею. Мы создадим класс, который сравнивает два числа.
Откройте файл
HelloJava.javaв редакторе WebIDE, если он еще открыт. Мы будем изменять этот файл для нашей новой программы.Замените все содержимое файла следующим кодом:
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(...): Эти строки выводят сообщения на основе результата сравнения.
Сохраните файл (Ctrl+S или Cmd+S).
Теперь нам нужно переименовать файл, чтобы оно соответствовало новому имени класса. В терминале убедитесь, что вы находитесь в директории
~/project:cd ~/projectПереименуйте файл с помощью команды
mv:mv HelloJava.java CompareNumbers.javaЭта команда перемещает (переименовывает) файл
HelloJava.javaвCompareNumbers.java.Теперь скомпилируйте новую программу:
javac CompareNumbers.javaЕсли компиляция прошла успешно, вы не должны увидеть никакого вывода.
Наконец, запустите скомпилированную программу:
java CompareNumbersВы должны увидеть вывод, указывающий на результат сравнения:
Comparing 15 and 10: 15 is greater than 10
Вы успешно создали и запустили программу на Java, которая сравнивает два соседних элемента и выводит результат. Это простое сравнение является основой для более сложных алгоритмов сортировки.
Проверка порядка возрастания и убывания
На предыдущем этапе мы научились сравнивать два числа. Теперь давайте расширим этот подход и проверим, находятся ли пара соседних чисел в порядке возрастания или убывания. Это еще один фундаментальный концепт при изучении сортировки.
Порядок возрастания означает расположение элементов от наименьшего к наибольшему (например, 1, 5, 10). Порядок убывания означает расположение элементов от наибольшего к наименьшему (например, 10, 5, 1).
Мы изменим нашу программу CompareNumbers.java, чтобы проверить эти конкретные порядки.
Откройте файл
CompareNumbers.javaв редакторе WebIDE.Замените существующий код следующим:
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обрабатывает случай, когда числа равны.
Сохраните файл (Ctrl+S или Cmd+S).
В терминале убедитесь, что вы находитесь в директории
~/project:cd ~/projectПереименуйте файл, чтобы оно соответствовало новому имени класса:
mv CompareNumbers.java CheckOrder.javaСкомпилируйте измененную программу:
javac CheckOrder.javaОпять же, отсутствие вывода означает успешную компиляцию.
Запустите программу:
java CheckOrderПри
number1 = 15иnumber2 = 10вывод должен быть следующим:Checking order of 15 and 10: The numbers are in descending order.Давайте быстро изменим числа, чтобы увидеть случай возрастания. Откройте
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."); } } }Сохраните файл.
Скомпилируйте программу снова:
javac CheckOrder.javaЗапустите программу:
java CheckOrderТеперь вывод должен отражать порядок возрастания:
Checking order of 5 and 8: The numbers are in ascending order.
Вы успешно изменили программу, чтобы проверить, находятся ли два соседних числа в порядке возрастания или убывания. Это важный шаг в понимании того, как алгоритмы сортировки определяют правильную позицию элементов.
Обработка равных элементов
На предыдущих этапах мы сравнивали два числа и проверяли, находятся ли они в порядке возрастания или убывания. Мы также предусмотрели случай, когда числа равны. На этом этапе мы сосредоточимся именно на обработке сценария, когда соседние элементы одинаковы.
При сортировке порядок равных элементов обычно не имеет значения для итогового отсортированного результата, но важно, чтобы наша логика сравнения правильно определяла этот случай. Наша текущая программа CheckOrder.java уже обрабатывает этот случай с помощью блока else. Давайте явно протестируем этот случай.
Откройте файл
CheckOrder.javaв редакторе WebIDE.Измените значения
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."); } } }Сохраните файл (Ctrl+S или Cmd+S).
В терминале убедитесь, что вы находитесь в директории
~/project:cd ~/projectСкомпилируйте измененную программу:
javac CheckOrder.javaОтсутствие вывода означает успешную компиляцию.
Запустите программу:
java CheckOrderПри установке обоих чисел равными 7 вывод должен быть следующим:
Checking order of 7 and 7: The numbers are equal.
Это подтверждает, что наша программа правильно определяет, когда два соседних числа равны. Обработка этого случая важна для полноты нашей логики сравнения.
В контексте алгоритмов сортировки, когда соседние элементы равны, они уже находятся в допустимом относительном порядке (как возрастание, так и убывание могут быть считаны как истинные в зависимости от строгости, но обычно они просто считаются "равными", и не требуется обмена элементов).
Теперь вы успешно протестировали случай, когда соседние элементы равны, завершив наше исследование сравнения двух соседних чисел для целей сортировки.
Резюме
В этом практическом занятии (лабораторной работе) мы начали с изучения фундаментального концепта сравнения соседних элементов, который является ключевой идеей в алгоритмах сортировки. Мы научились создавать простую программу на Java для сравнения двух чисел и определения, является ли одно из них больше, меньше или равно другому. Это включало в себя понимание базового синтаксиса Java для объявления переменных, присваивания значений и условных операторов (if, else if, else). Мы также практиковались в изменении существующих файлов на Java и узнали о важности соответствия имени класса имени файла.
На основе концепции сравнения соседних элементов мы затем расширили наше понимание, чтобы проверить как порядок возрастания, так и порядок убывания в последовательности чисел. Это потребовало итеративного применения логики сравнения к нескольким элементам. Наконец, мы рассмотрели сценарий обработки равных элементов при проверке сортировки, убедившись, что наша логика правильно обрабатывает случаи, когда соседние элементы имеют одинаковое значение. Эти шаги дали фундаментальное понимание того, как программно определить, отсортирован ли массив на Java.



