Java で 5 秒以内にクイック ソート アルゴリズムを作成しますか? 私がすることができます

クイック ソートは、1960 年にイギリスのコンピューター科学者ホールによって提案された非常に効率的なソート アルゴリズムです。その基本的な考え方は、並べ替える配列を 2 つの部分に分割するベンチマーク要素を選択することです。一方の部分のすべての要素はベンチマーク要素より小さく、もう一方の部分のすべての要素はベンチマーク要素より大きくなります。その後、2 つの部分がソートプロセス全体を再帰的に実行できます。

このアルゴリズムの主なステップは次のとおりです。

  1. 要素をピボットとして選択します。
  2. 配列を 2 つの部分に分割します。1 つはピボット未満のすべての要素を含み、もう 1 つはピボット以上のすべての要素を含みます。このプロセスはパーティション操作と呼ばれます。
  3. これら 2 つの部分配列を再帰的に並べ替えます

以下は、FuncGPT (FuncGPT) によって生成された Java のクイック ソートの基本的な例です。

// 类名:QuickSort
// 函数名:quickSort
// 函数功能:使用快速排序算法对数组进行排序
// POM依赖包:无

public class QuickSort {

    /**
     * 使用快速排序算法对数组进行排序
     * @param arr 待排序的数组
     */
    public static void quickSort(int[] arr) {
        if (arr == null || arr.length <= 1) {
            return;
        }
        sort(arr, 0, arr.length - 1);
    }

    /**
     * 快速排序的递归实现
     * @param arr 待排序的数组
     * @param low 左边界
     * @param high 右边界
     */
    private static void sort(int[] arr, int low, int high) {
        if (low < high) {
            int pivot = partition(arr, low, high); // 获取基准值的索引
            sort(arr, low, pivot - 1); // 对基准值左侧的子数组进行排序
            sort(arr, pivot + 1, high); // 对基准值右侧的子数组进行排序
        }
    }

    /**
     * 快速排序的分区实现
     * @param arr 待排序的数组
     * @param low 左边界
     * @param high 右边界
     * @return 选择的基准值的索引
     */
    private static int partition(int[] arr, int low, int high) {
        int pivot = arr[low]; // 选择第一个元素作为基准值
        int i = low + 1;
        int j = high;

        while (i <= j) {
            while (i <= j && arr[i] <= pivot) {
                i++;
            }

            while (i <= j && arr[j] > pivot) {
                j--;
            }

            if (i < j) {
                swap(arr, i, j);
            }
        }

        swap(arr, low, j); // 将基准值放到正确的位置上

        return j;
    }

    /**
     * 交换数组中两个位置的元素
     * @param arr 数组
     * @param i 位置1
     * @param j 位置2
     */
    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void main(String[] args) {
        int[] arr = new int[]{9, 5, 1, 8, 3, 7, 4, 2, 6};
        quickSort(arr);
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}
```

// 函数示例
// 使用快速排序算法对数组进行排序示例
// 入参:arr,待排序的数组
// 出参:无,直接对输入的数组进行排序
// 调用示例:
// int[] arr = new int[]{9, 5, 1, 8, 3, 7, 4, 2, 6};
// QuickSort.quickSort(arr);
// 输出结果:例如,对数组[9, 5, 1, 8, 3, 7, 4, 2, 6]进行排序
// 排序后的数组为[1, 2, 3, 4, 5, 6, 7, 8, 9]
// 则输出结果为:1 2 3 4 5 6 7 8 9
```
// 温馨提示:以上代码由 FuncGPT 生成,编译打包请使用 QuickSort.java 文件。

このコードの主な関数は次のとおりです。

  1. QuickSort(int[ ] arr) :クイックソートのエントリ関数で、整数配列をパラメータとして受け取り、ソートします。入力配列が空であるか、要素が 1 つだけ含まれている場合、この関数は直接戻ります。
  2. sort(int[ ] arr, int low, int high) :これは、配列の部分範囲をソートするために使用される再帰関数です。左側の境界 lowが右側の境界 highより小さい 場合は、基本要素を選択し、基本要素の左右の部分配列を再帰的に並べ替えます。
  3. Partition(int[ ] arr, int low, int high) :この関数は、クイック ソートでパーティション操作を実装するために使用されます。配列内の基本要素を選択し、配列内の他の要素を基本要素の左または右に移動します。この処理では、ベース要素より小さい要素はベース要素の左側に移動し、ベース要素より大きい要素はベース要素の右側に移動します。この関数は、ソートされた配列内の参照要素の位置を返します。
  4. swap(int[ ] arr, int i, int j) :この関数は、配列内の 2 つの位置にある要素を交換するために使用されます。main関数では、ソート対象の配列が作成され、次にquickSort関数を呼び出してソートし、最後にソートされた配列が出力されます。並べ替えられた結果が何であるかを知りたい場合は、このコードを実行してコンソール出力を確認できます。この例では、入力配列は [9, 5, 1, 8, 3, 7, 4, 2, 6] であり、クイック ソート後の出力結果は [1, 2, 3, 4, 5, 6, 7] になります。 、8、9]

 

以上が Java で記述された FuncGPT (Hui 関数) によるクイックソートアルゴリズムの基本的な処理です。もちろん、実際の使用では、適切な基底要素を選択する方法 (これは通常、ソートの効率に影響します) や、メモリが制限されている場合に大きな配列を処理する方法 (これは通常、プログラムの安定性)。そして、コーディングと大規模なマシンの共同トレーニングのベスト プラクティスを使用して誕生した FuncGPT (FuncGPT) は、すでにこれを達成するのに役立っています。ChatGPT-4 に匹敵する Wenxinyiyan に上記のコードを入れたところ、次のような評価が得られました。この Java コードは、明確な構造で、理解しやすく、使いやすいクイック ソート アルゴリズムを実装しています (詳細についてはスクリーンショットを参照)。

 

フルスタックの全自動ソフトウェア開発ツール SoFlu ソフトウェア ロボットの重要な部分として、 FuncGPT はあらゆるタイプの関数の作成をサポートします。自然言語を使用して Java 関数の要件を記述し、高品質で可読性の高い Java 関数コードをリアルタイムで生成します。生成されたコードは、IDEA に直接コピーすることも、Java の全自動開発ツールの関数ライブラリにワンクリックでインポートすることもできます。現在開発され、無料で使用されています。ダウンロードリンク: https://suo.im/76V9w

Lei Jun: Xiaomi の新しいオペレーティング システム ThePaper OS の正式版がパッケージ化されました。Gome App の抽選ページのポップアップ ウィンドウは創設者を侮辱しています。Ubuntu 23.10 が正式にリリースされました。金曜日を利用してアップグレードするのもいいでしょう! Ubuntu 23.10 リリース エピソード: ヘイトスピーチが含まれていたため、ISO イメージが緊急に「リコール」されました 23 歳の博士課程の学生が Firefox で 22 年間続いた「ゴーストバグ」を修正しました RustDesk リモート デスクトップ 1.2.3 がリリースされましたWayland を強化して TiDB 7.4 をサポート リリース: MySQL 8.0 と正式互換. Logitech USB レシーバーを取り外した後、Linux カーネルがクラッシュしました. マスターは Scratch を使用して RISC-V シミュレータをこすり、Linux カーネルを正常に実行しました. JetBrains が Writerside ツールを開始しました技術文書の作成に。
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/4868096/blog/10120227