如何在 Java 中检查数组是否已排序

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何在 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;:这两行声明了两个整数变量 number1number2,并为它们赋了初始值。
    • 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 语句。如果 ifelse 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. 在 WebIDE 编辑器中打开 CompareNumbers.java 文件。

  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 = 15number2 = 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. 在 WebIDE 编辑器中打开 CheckOrder.java 文件。

  2. number1number2 的值修改为相等:

    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 中变量声明、赋值和条件语句(ifelse ifelse)的基本语法。我们还练习了修改现有的 Java 文件,并了解了类名与文件名保持一致的重要性。

基于比较相邻元素的概念,我们进一步扩展了知识,以检查数字序列中的升序和降序排列。这需要将比较逻辑迭代应用于多个元素。最后,我们处理了在排序检查过程中遇到相等元素的情况,确保我们的逻辑能够正确处理相邻元素值相同的情况。这些步骤为你提供了在 Java 中以编程方式判断数组是否已排序的基础知识。