クイック ソートは、1960 年にイギリスのコンピューター科学者ホールによって提案された非常に効率的なソート アルゴリズムです。その基本的な考え方は、並べ替える配列を 2 つの部分に分割するベンチマーク要素を選択することです。一方の部分のすべての要素はベンチマーク要素より小さく、もう一方の部分のすべての要素はベンチマーク要素より大きくなります。その後、2 つの部分がソートプロセス全体を再帰的に実行できます。
このアルゴリズムの主なステップは次のとおりです。
- 要素をピボットとして選択します。
- 配列を 2 つの部分に分割します。1 つはピボット未満のすべての要素を含み、もう 1 つはピボット以上のすべての要素を含みます。このプロセスはパーティション操作と呼ばれます。
- これら 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 文件。
このコードの主な関数は次のとおりです。
- QuickSort(int[ ] arr) :クイックソートのエントリ関数で、整数配列をパラメータとして受け取り、ソートします。入力配列が空であるか、要素が 1 つだけ含まれている場合、この関数は直接戻ります。
- sort(int[ ] arr, int low, int high) :これは、配列の部分範囲をソートするために使用される再帰関数です。左側の境界 lowが右側の境界 highより小さい 場合は、基本要素を選択し、基本要素の左右の部分配列を再帰的に並べ替えます。
- Partition(int[ ] arr, int low, int high) :この関数は、クイック ソートでパーティション操作を実装するために使用されます。配列内の基本要素を選択し、配列内の他の要素を基本要素の左または右に移動します。この処理では、ベース要素より小さい要素はベース要素の左側に移動し、ベース要素より大きい要素はベース要素の右側に移動します。この関数は、ソートされた配列内の参照要素の位置を返します。
- 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 ツールを開始しました技術文書の作成に。