快速排序的基本思想和java实现

快速排序是一种常用的排序算法,基本思想是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的数据都比另一部分小,然后再对这两部分数据进行排序,直到整个序列有序。

具体的实现步骤如下:

  1. 选择一个基准元素,一般选择第一个元素作为基准。
  2. 将序列进行划分,将比基准元素小的元素放在基准元素的左边,比基准元素大的元素放在基准元素的右边。
  3. 对左右两个子序列进行递归排序。

下面是基于Java语言的快速排序实现代码:

java 复制代码
public class QuickSort {
    
    public static void quickSort(int[] arr) {
        if (arr == null || arr.length == 0) {
            return;
        }
        quickSort(arr, 0, arr.length - 1);
    }
    
    private static void quickSort(int[] arr, int low, int high) {
        if (low >= high) {
            return;
        }
        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; // 基准元素归位
        return low;
    }

    public static void main(String[] args) {
        int[] arr = {6, 3, 9, 1, 4, 7, 2, 8, 5};
        quickSort(arr);
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}

以上代码中的quickSort方法是快速排序的入口方法,它首先判断数组是否为空或长度为0,如果是,则直接返回。然后调用quickSort方法对整个序列进行排序。

quickSort方法中递归调用了partition方法,用于划分序列。partition方法首先选择第一个元素作为基准,然后通过两个指针lowhigh在序列中进行左右扫描,找到比基准小的元素和比基准大的元素,交换它们的位置。然后将基准元素归位,并返回基准元素的位置。

最后,在main方法中测试了一个例子,输出排序后的结果。

快速排序的平均时间复杂度为O(nlogn),最坏情况下为O(n^2),空间复杂度为O(logn)。

相关推荐
To_OC18 分钟前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
delishcomcn1 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法
触底反弹1 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
大模型码小白1 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
雪碧聊技术2 小时前
力扣 LCR 091. 粉刷房子 —— 动态规划入门详解
算法·动态规划
腾渊信息科技公司2 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地3 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
延凡科技4 小时前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
CV-Climber4 小时前
检索技术的实际应用
人工智能·算法