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

ソートのための隣接要素の比較

このステップでは、多くのソートアルゴリズムの核心となる考え方である、隣接する要素を比較する基本的な概念を探り始めます。ソートとは、要素を昇順や降順などの特定の順序で並べるプロセスです。

数値のリストがあり、それを小さい順から大きい順にソートしたいとしましょう。そのための簡単な方法の 1 つは、隣り合った 2 つの数値を見て、どちらが先に来るべきかを判断することです。

この考え方を示すために、簡単な Java プログラムを作成しましょう。2 つの数値を比較するクラスを作成します。

  1. WebIDE エディタで HelloJava.java ファイルがまだ開いている場合は開きます。このファイルを新しいプログラム用に変更します。

  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;: これらの行は、2 つの整数型変数 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 文です。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

2 つの隣接要素を比較し、結果を出力する Java プログラムを正常に作成して実行しました。この簡単な比較は、より複雑なソートアルゴリズムの基礎となります。

昇順と降順のチェック

前のステップでは、2 つの数値を比較する方法を学びました。今回は、それを拡張して、隣接する一対の数値が昇順または降順に並んでいるかどうかをチェックしましょう。これは、ソートに関するもう 1 つの基本的な概念です。

昇順とは、要素を小さい順から大きい順に並べることを意味します (例: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 条件は、number1number2 より小さいかどうかをチェックします。真であれば、昇順であることを意味します。
    • else if 条件は、number1number2 より大きいかどうかをチェックします。真であれば、降順であることを意味します。
    • 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.

2 つの隣接する数値が昇順または降順に並んでいるかどうかをチェックするようにプログラムを正常に変更しました。これは、ソートアルゴリズムが要素の正しい位置を決定する方法を理解する上で重要なステップです。

等しい要素の扱い

前のステップでは、2 つの数値を比較し、昇順または降順に並んでいるかどうかをチェックしました。また、数値が等しい場合も考慮しました。このステップでは、隣接する要素が同じであるシナリオの扱いに特に焦点を当てます。

ソートを行う際、等しい要素の順序は最終的なソート結果に通常影響しませんが、比較ロジックがこのケースを正しく識別することは重要です。現在の 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.

これにより、プログラムが 2 つの隣接する数値が等しい場合を正しく識別できることが確認されました。このケースを扱うことは、比較ロジックの完全性にとって重要です。

ソートアルゴリズムの文脈では、隣接する要素が等しい場合、それらは既に有効な相対順序にあります (厳密性によっては昇順と降順の両方が真と見なされることもありますが、通常は「等しい」と見なされ、交換は必要ありません)。

これで、隣接する要素が等しい場合を正常にテストし、ソート目的で 2 つの隣接する数値を比較する探索が完了しました。

まとめ

この実験では、ソートアルゴリズムの核心概念である隣接要素の比較についての基本的な考え方を探求し始めました。2 つの数値を比較し、一方が他方より大きい、小さい、または等しいかどうかを判断する単純な Java プログラムの作成方法を学びました。これには、変数の宣言、代入、および条件文 (ifelse ifelse) の基本的な Java 構文の理解が必要でした。また、既存の Java ファイルの変更を練習し、クラス名とファイル名を一致させる重要性を学びました。

隣接要素の比較という概念を基に、数値のシーケンス内で昇順と降順の両方をチェックする理解を拡張しました。これには、比較ロジックを複数の要素に繰り返し適用することが含まれました。最後に、ソートチェック中に等しい要素を扱うシナリオに対応し、隣接要素が同じ値を持つ場合をロジックが正しく考慮するようにしました。これらのステップにより、Java で配列がソートされているかどうかをプログラムで判断する基本的な理解が得られました。