javaのクイックソートアルゴリズムの実装方法は何ですか?

クイックソートは、一般的に使用されるソーティングアルゴリズムであり、その基本的な考え方は、一回のソートでソートされるデータを独立した2つの部分に分割し、それぞれの部分でより小さいデータの部分と大きいデータの部分ができるだけ多くなるようにします。そして、それぞれの部分に対して再起的にクイックソートを実行し、データ全体を整列されたシーケンスにすることを目的としています。

以下は、Javaでクイックソートアルゴリズムを実装した例のコードです。

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

    public static void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            // 将数组分区,并获取分区点的索引
            int pivotIndex = partition(arr, low, high);
            // 对左侧子数组进行快速排序
            quickSort(arr, low, pivotIndex - 1);
            // 对右侧子数组进行快速排序
            quickSort(arr, pivotIndex + 1, high);
        }
    }

    public static int partition(int[] arr, int low, int high) {
        // 将第一个元素作为分区点
        int pivot = arr[low];
        while (low < high) {
            // 从右往左找到第一个小于分区点的元素
            while (low < high && arr[high] >= pivot) {
                high--;
            }
            // 将该元素放到左侧
            arr[low] = arr[high];
            // 从左往右找到第一个大于分区点的元素
            while (low < high && arr[low] <= pivot) {
                low++;
            }
            // 将该元素放到右侧
            arr[high] = arr[low];
        }
        // 将分区点放到正确的位置上
        arr[low] = pivot;
        // 返回分区点的索引
        return low;
    }
}

上記のコードでは、quickSortメソッドが再帰的にクイックソートアルゴリズムを実装し、partitionメソッドが配列を分割し、分割ポイントのインデックスを返します。各再帰呼び出しで、分割ポイントを選択して配列を2つのサブ配列に分割し、それぞれのサブ配列に対してクイックソートを行います。最後に、分割ポイントを正しい位置に配置して1回のソートが完了します。クイックソートアルゴリズムを再帰的に呼び出すことにより、最終的には配列全体をソートすることができます。

bannerAds