十大排序算法--快速排序

目录

原理

第一步

第二步

代码

递归实现快速排序

原理

分治法核心步骤

  1. 选择基准值(Pivot)

    从数组中选一个元素作为基准值(如最右侧元素、中间元素或随机元素)。

  2. 分区(Partition)

    将数组分为两部分:

    • 左侧:所有元素 小于等于 基准值。

    • 右侧:所有元素 大于等于 基准值。

      基准值最终位于正确的位置(排序后的最终位置)。

  3. 递归排序子数组

    对左右子数组递归执行上述步骤,直到子数组长度为 1 或 0(已有序)。

以下面这一组数字为例

第一步

找一个基准值,这里以46为基准

从后面往前找比基准值小的交换,从前面找比基准值大的交换。

1.发现 7比46小,然后7现在就排在第一个。

2.从前面找比46大的,找啊找,找到了94比46大,我们就把94放到原来7的位置,94也就是基准值的位置了,这样就完成了第一步。

第二步

经过第一步已经找到基准值的位置,从这里开始进行递归,对基准值左边与右边分别进行递归排序,直到排序完成。

代码

下面是递归代码展示:

java 复制代码
import java.util.Arrays;

/**
 * 快速排序
 * 先确定一个基准点
 * 将比基准值小的放在基准值左边,比基准值大的放在右边
 * 递归进行
 * 从后往前找比基准值小的并交换
 * 从前往后找比基准值大的并交换
 */
public class FastSort {
    public void sort(int[] arr, int left, int right) {
        if (left >= right) {
            return;
        }
        int pivot = arr[left];
        int i = left;
        int j = right;
        while (i < j) {
            while (i < j && arr[j] > pivot) {
                j--;
            }
            if (i < j) {
                arr[i] = arr[j];
                i++;
            }
            while (i < j && arr[i] < pivot) {
                i++;
            }
            if (i < j) {
                arr[j] = arr[i];
                j--;
            }
        }
        arr[i] = pivot;
        sort(arr, left, i - 1);
        sort(arr, i + 1, right);
    }

    public static void main(String[] args) {
        int arr[] = {46, 5, 3, 94, 2, 6, 7};
        FastSort f = new FastSort();
        System.out.println("排序前" + Arrays.toString(arr));
        f.sort(arr, 0, arr.length - 1);
        System.out.println("排序后" + Arrays.toString(arr));
    }

}

结果页不出所料

时间复杂度

快速排序的平均时间复杂度为O(nlogn),但最坏情况下也可以达到O(n2)。

相关推荐
代码中介商1 天前
排序算法完全指南(三):插入排序深度详解
算法·排序算法
承渊政道1 天前
【贪心算法】(经典实战应用解析(六):整数替换、俄罗斯套娃信封问题、可被三整除的最⼤和、距离相等的条形码、重构字符串)
c++·算法·leetcode·贪心算法·排序算法·动态规划·哈希算法
WL_Aurora1 天前
Python 算法基础篇之排序算法(二):希尔、快速、归并
python·算法·排序算法
薇茗1 天前
【初阶数据结构】 升沉有序的平仄 排序 3
c语言·开发语言·数据结构·算法·排序算法·文件归并排序
薇茗1 天前
【初阶数据结构】 升沉有序的平仄 排序 2
c语言·数据结构·算法·排序算法·快排精讲
WL_Aurora2 天前
Python 算法基础篇之排序算法(一):冒泡、选择、插入
python·算法·排序算法
夏日听雨眠2 天前
排序(选择排序 ,冒泡排序,归并排序)
数据结构·算法·排序算法
RH2312112 天前
2026.5.17数据结构 八大排序
数据结构·算法·排序算法
夏日听雨眠2 天前
排序(直接插入排序,希尔排序)
数据结构·算法·排序算法
sheeta19983 天前
LeetCode 每日一题笔记 日期:2026.05.19 题目:2540. 最小公共值
笔记·leetcode·排序算法