(笔记)快速排序

快速排序

快速排序是一种常用的排序算法。它的时间复杂度为O(nlogn),并且在实际应用中表现良好。快速排序的基本思想是通过选择一个基准数,将数组分成两个子数组,比基准数小的放在左边,比基准数大的放在右边,然后对左右子数组分别递归地进行快速排序。

以下是使用 Java 实现的快速排序代码:

public class QuickSort {
    public void sort(int[] arr, int left, int right) {
        if (left >= right) return;
        int pivot = partition(arr, left, right);
        sort(arr, left, pivot - 1);
        sort(arr, pivot + 1, right);
    }

    private int partition(int[] arr, int left, int right) {
        int pivot = arr[left];
        int i = left + 1, j = right;
        while (i <= j) {
            if (arr[i] < pivot) {
                i++;
            } else if (arr[j] >= pivot) {
                j--;
            } else {
                swap(arr, i, j);
            }
        }
        swap(arr, left, j);
        return j;
    }

    private void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

快速排序的时间复杂度为 O(nlogn),其中 n 表示数组的大小。这是因为快速排序每次将数组分成两个子数组,并对每个子数组进行递归排序。在最好情况下,即每次划分都将数组划分为大小相等的两个子数组时,在最坏情况下,即每次划分都只得到一个子数组时,但是,由于快速排序的常数因子比较小,因此在实践中表现良好。

快速排序通常用于需要对大量数据进行排序时。由于其时间复杂度比一些其他排序算法(如归并排序)高,因此在数据量较小的情况下,可能不如其他算法效率高。但是,由于快速排序的常数因子比较小,因此当数据量较大时,快速排序往往比其他算法更快。此外,快速排序还具有空间复杂度低的优点,因为它可以在原地对数组进行排序。

总之,快速排序是一种非常实用的排序算法,尤其适用于需要对大量数据进行排序的情况。

你可能感兴趣的:(笔记,排序算法,算法)