クイックソートはバブルソートを改良したものです。最初のレコードシーケンスがキーワードで順序付けされている場合、または基本的に順序付けされている場合、バブルソートに変質します。これは再帰的な原理を使用しており、同じ桁数 O(n longn) のすべての並べ替え方法の中で最高の平均パフォーマンスを備えています。平均時間の観点から、これは現在最良の内部並べ替え方法と考えられています
基本的な考え方は、一方向の並べ替えを通じて並べ替えるデータを 2 つの独立した部分に分割し、1 つの部分のすべてのデータの方がすべての部分のデータよりも優れているということです。他の部分のデータは小さい必要があるため、この方法を使用してデータの 2 つの部分をそれぞれすばやく並べ替えることができ、並べ替えプロセス全体を再帰的に実行できるため、データ全体が順序付けされたシーケンスになります。
3 つのポインター: 最初のポインターはピボットキー ポインター (ピボット) と呼ばれ、2 番目のポインターと 3 番目のポインターはそれぞれ左ポインターと右ポインターで、それぞれ左端の値と右端の値を指します。左ポインタと右ポインタは両側から同時に中央に近づきます。その際、常にピボットと比較され、ピボットより小さい要素は下端に移動し、ピボットより大きい要素は下端に移動します。ハイエンドは選択後は変わらず、前が小さく後ろが大きい中間になります。
2つの関数が必要です:
① 再帰関数 public static void QuickSort(int[]n ,int left,int right)
② Split 関数 (ワンパスクイックソート関数) public static int Partition(int[]n ,int左、int 右)
JAVA ソース コード (正常に実行):
package testSortAlgorithm; public class QuickSort { public static void main(String[] args) { int [] array = {49,38,65,97,76,13,27}; quickSort(array, 0, array.length - 1); for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } } /*先按照数组为数据原型写出算法,再写出扩展性算法。数组{49,38,65,97,76,13,27} * */ public static void quickSort(int[]n ,int left,int right){ int pivot; if (left < right) { //pivot作为枢轴,较之小的元素在左,较之大的元素在右 pivot = partition(n, left, right); //对左右数组递归调用快速排序,直到顺序完全正确 quickSort(n, left, pivot - 1); quickSort(n, pivot + 1, right); } } public static int partition(int[]n ,int left,int right){ int pivotkey = n[left]; //枢轴选定后永远不变,最终在中间,前小后大 while (left < right) { while (left < right && n[right] >= pivotkey) --right; //将比枢轴小的元素移到低端,此时right位相当于空,等待低位比pivotkey大的数补上 n[left] = n[right]; while (left < right && n[left] <= pivotkey) ++left; //将比枢轴大的元素移到高端,此时left位相当于空,等待高位比pivotkey小的数补上 n[right] = n[left]; } //当left == right,完成一趟快速排序,此时left位相当于空,等待pivotkey补上 n[left] = pivotkey; return left; } }
クイック ソート アルゴリズムの原則と Java 再帰的実装に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。