📜  快速排序 java (1)

📅  最后修改于: 2023-12-03 15:09:54.360000             🧑  作者: Mango

快速排序 Java

快速排序是一种高效的排序算法,它利用了分治的思想,将原始数据分成较小的子集,每个子集都是按照一定规则排好序的,再将有序的子集合并起来,最终得到整个序列有序的结果。

实现原理

快速排序的基本思想是通过一趟排序将待排序序列分割成独立的两个部分,其中一部分比另一部分所有元素都要小。然后再按此方法对这两部分中的每一部分继续进行快速排序,整个排序过程可以递归进行,以此达到整个序列有序的目的。

具体实现步骤如下:

  1. 选择一个基准元素(通常是待排序的第一个元素);
  2. 将所有比基准元素小的元素移到基准元素的左侧,所有比基准元素大的元素移到基准元素的右侧;
  3. 对基准元素的左边和右边分别进行快速排序;
代码实现

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

public static void quickSort(int[] arr, int low, int high) {
    if (low < high) {
        int pivot = partition(arr, low, high); // 找到基准元素
        quickSort(arr, low, pivot - 1); // 对基准元素左边的子序列进行快速排序
        quickSort(arr, pivot + 1, high); // 对基准元素右边的子序列进行快速排序
    }
}

private 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; // 此时low=high是基准元素的位置,所以将基准元素放到中间
    return low; // 返回基准元素的位置
}
性能分析

快速排序是一种效率较高的排序算法,在大部分情况下,其时间复杂度为 O(nlogn),最坏情况下可能退化成 O(n^2)。快速排序的平均时间复杂度为 O(nlogn),具体取决于基准元素的选择方式和划分方式。在实际应用中,快速排序常常优于其他排序算法,是一种十分常用的排序算法。

参考链接