首页 > 编程语言 >【排序算法】快速排序

【排序算法】快速排序

时间:2023-03-14 23:23:16浏览次数:27  
标签:arr leftIndex int while 算法 rightIndex 排序 快速

1  前言

今天把排序的几个算法过一下,这节我们看一下快速排序,简单的来说就是先找位置再拆,我们看示例。

2  代码示例

/**
 * 快速排序
 * 快排主要就是先找位置再拆
 */
public static void quickSort(int[] arr, int start, int end) {
    // 递归的出口
    if (start >= end) {
        return;
    }
    // 左右的位置索引
    int leftIndex = start;
    int rightIndex = end;
    // 默认先将左侧的作为标杆,进行位置查找
    int temp = arr[leftIndex];
    // 当左右未相遇时
    while (leftIndex < rightIndex) {
        // 从右边找如果比标杆大于等于的就继续--,直到找到一个小的
        while (arr[rightIndex] >= temp && leftIndex < rightIndex) {
            rightIndex--;
        }
        // 从左边找如果比标杆小于等于的就继续++,直到找到一个大的
        while (arr[leftIndex] <= temp && leftIndex < rightIndex) {
            leftIndex++;
        }
        // 如果左右未相遇,说明左右都各找到一个了,进行两者的交换,然后继续
        if (leftIndex < rightIndex) {
            int z = arr[leftIndex];
            arr[leftIndex] = arr[rightIndex];
            arr[rightIndex] = z;
        }
    }
    /**
     * 将找到的位置和标杆的值进行交换
     */
    arr[start] = arr[leftIndex];
    arr[leftIndex] = temp;
    // 左侧进行递归
    quickSort(arr, start, rightIndex);
    // 右侧进行递归
    quickSort(arr, rightIndex+1, end);
}
public static void main(String[] args) {
    int[] arr = IntStream.generate(() -> ThreadLocalRandom.current().nextInt(10000)).limit(10000).toArray();
    System.out.println("排序前:" + Arrays.stream(arr).mapToObj(String::valueOf).collect(Collectors.joining(",")));
    quickSort(arr, 0, arr.length - 1);
    System.out.println("排序后:" + Arrays.stream(arr).mapToObj(String::valueOf).collect(Collectors.joining(",")));
}

3  小结

有写的不对的地方,欢迎指正哈。

标签:arr,leftIndex,int,while,算法,rightIndex,排序,快速
From: https://www.cnblogs.com/kukuxjx/p/17216851.html

相关文章

  • 插入排序——C语言描述
    插入排序——C语言描述目录插入排序——C语言描述0测试用例框架1定义2代码4测试用例0测试用例框架https://blog.csdn.net/m0_59469991/article/details/127137119?......
  • 【排序算法】归并排序
    1 前言今天把排序的几个算法过一下,这节我们看一下归并排序,简单的来说就是先拆再合,跟快排相反(快排时先找位置再两边拆),我们看示例。2 代码示例/***归并排序*特......
  • 快速排序
    原理取一个元素,使其归位(归位函数),归位后分为左边,右边,并且得到归位元素的位置归位元素位置的左右两边列表分别执行递归操作代码defpartion(lst,left,right): tmp=......
  • 回溯算法解决排列—组合—子集问题
    回溯算法解决排列—组合—子集问题无论是排列、组合还是子集问题,就是让你从序列nums中以给定规则取若干元素,主要有以下几种变体:元素无重不可复选,即nums中的元素都......
  • 二分图匹配(匈牙利算法和KM算法)
    二分图匹配对于一个二分图,其匹配是一个边的集合,每条边不应用重复的点它有一个匹配,为图中红色线段但这个匹配不是(边数)最大的,因此不是最大匹配匈牙利算法匈牙利算法......
  • 多源最短路算法——Floyd算法(转载)
    1.多源最短路简介:我们知道单源最短路是指从某一个源点到图中的其它顶点的最短路。多源最短路就是指每一个点到图中其他顶点的最短路。那么有的人肯定想我知道求单源最短路......
  • Qt 算法->程序运行时间(计时函数)
    参考:Qt算法->程序运行时间(计时函数)_qtclock函数_男银的骄傲的博客-CSDN博客 用的这个博客里的方法 QT笔记(7)——Qt利用QTime计算程序运行时间_abcvincent的博客-CSDN......
  • Tapdata Cloud 基础课:新功能详解之「授权系统自动分析」,一键定位任务报错原因,快速获取
    【前言】作为中国的“Fivetran/Airbyte”,Tapdata是一个以低延迟数据移动为核心优势构建的现代数据平台,内置60+数据连接器,拥有稳定的实时采集和传输能力、秒级响应的......
  • 快速构造Python爬虫请求,有这个网站就够了!
    引言大家好,我是蜡笔小曦。我们在通过程序向某个网页发起请求时,实际上是模拟浏览器进行http(超文本传输协议)请求,这就要求我们需要按照固定的格式进行代码构造。一般请求......
  • 【排序算法】希尔排序
    1 前言今天把排序的几个算法过一下,这节我们看一下希尔排序,简单的来说就是多次插入排序,我们看示例。2 代码示例/***希尔排序,也就是多次插入排序*可以参考插入......