快速排序算法详解(思想原理及实现示例)

快速排序算法详解(思想原理及实现示例)-mikechen

快速排序算法定义

快速排序算法,英文是Quick Sort,是一种常见且高效的排序算法。

 

快速排序算法思想

快速排序基于分治(Divide and Conquer)的思想,通过不断地将数组分成两个子数组,并对子数组进行递归排序,最终将整个数组有序化。

快速排序算法详解(思想原理及实现示例)-mikechen

主要分为如下步骤:

1、第一步:挑选基准

从数列中挑出一个元素,称为 “基准”,通常是数组中的某个元素。

2.第二步:分区操作

将数组中小于基准元素的元素放在基准元素的左边,大于基准元素的元素放在右边,这一步称为分区(Partition)操作。

3.第三步:递归操作

递归地把小于基准值元素的子数组和大于基准值元素的子数组排序,直到整个数组有序。

 

快速排序算法示例

假设有一个未排序的整数数组 [7, 2, 1, 6, 8, 5, 3, 4]。

首先,选择基准元素

选择基准元素,通常选择第一个或最后一个元素,这里选择第一个元素 7。

 

然后,进行分区操作

比 7 小的元素放在左边,比 7 大的元素放在右边:

[2, 1, 6, 5, 3, 4]   7   [8]

现在,我们分别对左右两个子数组进行递归排序。

对于左边的子数组 [2, 1, 6, 5, 3, 4],选择基准元素 2,再次进行分区操作:

[1]   2   [6, 5, 3, 4]

继续递归排序,直到所有子数组都有序,最终整个数组变得有序。

 

快速排序算法优缺

优点

  • 在平均情况下,快速排序具有良好的性能,通常比其他常见的排序算法(如冒泡排序和插入排序)快得多。
  • 快速排序适用于大型数据集和通用排序需求。

缺点

  • 在最坏情况下,快速排序的性能可能下降为 O(n^2),这在已经有序或近乎有序的数组上发生,但可以通过一些优化手段来改善。
  • 快速排序不适用于小型数组,因为递归调用的开销可能会显著影响性能。

 

快速排序算法实现

以下是一个使用Java编写的快速排序算法示例:

public class QuickSort {
    public static void main(String[] args) {
        int[] arr = {7, 2, 1, 6, 8, 5, 3, 4};

        quickSort(arr, 0, arr.length - 1);

        System.out.println("Sorted Array:");
        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[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; // 返回基准元素的索引
    }

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

这个示例演示了如何实现快速排序算法,这个示例的输出将是排序后的数组 [1, 2, 3, 4, 5, 6, 7, 8]。

 

快速排序算法总结

总之,快速排序是一种强大的排序算法,常用于实际应用中,特别是处理大型数据集。

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法