java常见算法 快速排序


快速排序(Quick Sort)是一种高效的排序算法,它采用了分治的思想。快速排序的基本思想是选择一个基准元素,通过一趟排序将数组分成两部分,其中一部分的所有元素都小于基准元素,另一部分的所有元素都大于基准元素。然后,对这两部分分别进行递归排序,最终得到有序的数组。

具体步骤如下:

  1. 选择一个基准元素(通常为数组的第一个元素)。
  2. 将数组分成两部分,使得左侧部分的元素都小于等于基准元素,右侧部分的元素都大于基准元素。这个过程称为分区(Partition)。
  3. 对左右两个部分分别进行递归排序,直到每个部分只包含一个元素或为空。
  4. 合并排序好的左右两个部分,得到最终的有序数组。

下面是使用Java实现的快速排序算法:

public 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);
    }
}

private int partition(int[] arr, int low, int high) {
    int pivot = arr[high];
    int i = low - 1;
    for (int j = low; j < high; j++) {
        if (arr[j] <= pivot) {
            i++;
            swap(arr, i, j);
        }
    }
    swap(arr, i + 1, high);
    return i + 1;
}

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

在上述代码中,arr是待排序的数组,lowhigh分别表示当前待排序部分的起始和结束索引。在quickSort函数中,首先通过调用partition函数找到基准元素的正确位置,并将数组分成两部分。然后,递归调用quickSort函数对左右两部分进行排序。

partition函数实现了分区过程,通过遍历待排序部分的元素,将小于等于基准元素的元素移到基准元素的左边。最后,将基准元素放置到正确的位置,并返回基准元素的索引。

快速排序的平均时间复杂度为O(nlogn),其中n为数组的长度。在大多数情况下,快速排序是一种高效的排序算法,尤其对于大规模的乱序数组。然而,在最坏情况下,快速排序的时间复杂度可能达到O(n^2),因此一些改进的算法如随机化快速排序


原文链接:codingdict.net