八大排序之快速排序

数据结构与算法:排序算法 排序算法可以根据时间复杂度分为O(n²)、O(nlogn)和O(n)三类。下面我们将介绍几种常见的排序算法。追求稳定性:选择归并排序追求效率:选择快速排序空间受限:选择堆排序数据范围小:选择计数排序列表数据排序优先使用系统API(Collections.sort)自定义排序需求时,根据数据特征选择合适算法注意排序操作的性能影响,考虑异步处理优先使用语言或框架提供的排序工具需要自定义排序时,优先考虑快速排序关注排序算法的稳定性需求注意性能优化,避免主线程大量排序操作。 阅读详情

快速排序(Quick Sort)

通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录进行排序,以达到整个序列有序的目的。

枢轴(pivot)

先选取序列当中的一个关键字,想尽办法将其放在一个位置,使得它左边的值都比它小,右边的值都比它大,我们将这样子的关键字称为枢轴。

函数构成

partition
选出枢轴,将比枢轴小的数字放在左边,将比枢轴大的数字放在右边,所有坐标遍历之后,返回此时枢轴的坐标
swap
交换两个坐标的值

算法图解

以{50,10,90,30}的数组为例,以下是首次交换的过程图解
快速排序.jpeg

代码(java)实现

public class QuickSortDemo {
    public static void main(String[] args) {
        int[] list = {50, 10, 90, 30, 70, 40, 80, 60, 20};
        quickSort(list);

        for (int a : list) {
            System.out.println(a);
        }
    }

    private static void quickSort(int[] list) {
        if (list == null || list.length == 0) {
            return;
        }

        qSort(list, 0, list.length - 1);
    }

    private static void qSort(int[] list, int low, int high) {

        if (low < high) {
            int pivot = partition(list, low, high);
            qSort(list, low, pivot - 1);
            qSort(list, pivot + 1, high);
        }

    }

    /**
     * 我们这里以list[low]作为参考,所以一定要先从high开始进行交换
     * @param list
     * @param low
     * @param high
     * @return
     */
    private static int partition(int[] list, int low, int high) {
        int pivotKey = list[low];

        while (low < high) {

            while (low < high && list[high] >= pivotKey) {
                high--;
            }
            swap(list, low, high);

            while (low < high && list[low] <= pivotKey) {
                low++;
            }
            swap(list, low, high);

        }

        return low;
    }

    /**
     * 交换两个坐标的值
     * @param list
     * @param index1
     * @param index2
     */
    private static void swap(int[] list, int index1, int index2) {
        int data = list[index1];
        list[index1] = list[index2];
        list[index2] = data;
    }
}


快速排序的实现代码(通俗易懂) 精炼的快速排序实现代码,简洁明了,语言是C,主函数可以随意调试更改。注:快速排序的优化方式多种多样,并不局限于此,如有好的改进方法欢迎交流。 立即下载

相关推荐

数组快速排序法后的统计分析

随机产生一个数组,然后对数组排序,均值 方差 标准差等分析。

必须知道的八大种排序算法【java实现】(一) 冒泡排序、快速排序

冒泡排序   冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。   冒泡排序的示例: 冒泡排序的算法实现如下:【排序后,数组从小到大排列】    /** * 冒泡排

编故事的逗老师的专栏 581

Zlib1.2.11源码编译(Win10+VS2019)

下载 下载网址: zlib Home Site 得到文件: 解压缩到“D:\SourceCodes\zlib-1.2.11” 使用CMake配置、生成并打开项目 将CMakeLists.txt拖入CMake,配置(Configure): 生成(Generate) 打开项目(Open Project),CMake调用VS2019打开项目 生成debug版本 构建项目ALL_BUILD。成功生成debug版本 在“D:\Sourc...

Alexabc3000的专栏 1893

Android-快速排序

算法思想:               基于分治的思想,是冒泡排序的改进型。        首先在数组中选择一个基准点(该基准点的选取可能影响快速排序的效率,后面讲解选取的方法),然后分别从数组的两端扫描数组,设两个指示标志(lo指向起始位置,hi指向末尾),首先从后半部分开始,如果发现有元素比该基准点的值小,就交换lo和hi位置的值,然后从前半部分开始扫描,发现有元素大于基准点的值,就交换l...

墨漓 2230

AutoSAR RTE调度机制揭秘:从定时器事件到Runnable执行的完整流程

本文深入解析了AutoSAR RTE(运行时环境)的核心调度机制,详细阐述了从定时器事件触发到Runnable(可运行实体)执行的完整流程。通过剖析Rte_Start()函数、OS任务与警报的交互,以及事件驱动循环,揭示了RTE如何作为幕后指挥家,高效、可靠地协调软件组件间的周期性任务执行,是打通AutoSAR应用开发的关键。

weixin_29169899的博客 226

在Kintex-7 FPGA上实现皮秒级时间测量:手把手教你搭建CARRY4进位链TDC(附源码与约束)

本文详细介绍了在Kintex-7 FPGA上利用CARRY4进位链实现皮秒级时间测量(TDC)的完整方案。从CARRY4的物理特性分析到硬件架构设计,再到校准方法与精度提升技巧,手把手教你构建测量精度达53ps的TDC系统,并附源码与约束文件,助力激光雷达、高能物理等精密计时应用开发。

weixin_42550052的博客 444

android快速排序方法,android算法 - 排序

算法.png冒泡排序/*** 冒泡排序* @param array 数组* @param len 数组长度*/static void bubble(int array[], int len) {for (int i = len - 1; i >= 0; i--) {for (int j = 0; j < i; j++) {if (array[j] > array[j + 1]...

weixin_32541907的博客 522

WinForm轻松打造AntDesign现代化工具栏

摘要: 本文介绍如何在WinForm中利用AntdUI库实现AntDesign风格工具栏,包括安装配置、动态生成按钮/下拉菜单、布局优化及主题美化。通过AntButton、AntDropdown等控件结合事件绑定,可快速构建支持图标、工具提示、权限控制的现代化工具栏,并解决常见图标加载、布局错乱问题。最后提供代码示例与响应式设计技巧,助你打造高效美观的WinForm界面。 (字数:150)

java专栏 1592

[Android算法初级学习]简单排序算法之快速排序

111

小鸡仔hana的博客 445

Cesium WebGL性能调优实战:从卡顿根源到流畅渲染

本文深入探讨Cesium WebGL性能调优的实战技巧,从硬件配置、框架适配到3D Tiles加载策略,全面解决卡顿问题。通过强制启用独立显卡、优化浏览器设置、避免Vue内存陷阱等实用方法,显著提升3D地图应用的流畅度。文章还分享了高级调试工具和实战避坑经验,帮助开发者实现高效渲染。

weixin_27215337的博客 419

实现飞书机器人推送消息到指定群组或者用户

飞书是一个集成了聊天、协作和办公功能的企业级平台,广泛应用于企业内部沟通和协作。飞书机器人(Feishu Bot)是一种强大的工具,允许开发者通过编程接口与飞书进行互动,从而实现自动化消息推送和任务管理。本文将详细介绍如何通过飞书机器人推送消息给指定的人或者群组,帮助您快速上手。

qq_41898196的博客 5863

八大排序——快速排序

八大排序——快速排序

2301_76895050的博客 1465

从Delta Delay到Timing Window:详解数字芯片后端时序差异的那些坑

本文深入剖析了数字芯片后端设计中,模块级与系统级时序分析结果不一致的核心原因。重点解释了Delta Delay如何导致模块级分析的乐观假设,以及Timing Window(时序窗口)差异如何通过影响串扰噪声计算,在顶层集成时引发新的时序违例,尤其是保持时间问题。文章为工程师提供了从约束建模到签核策略的系统性应对方案。

beer8的博客 498

java快排_八大排序-快速排序(手写快排)

概要快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一。其广泛应用的主要原因是高效,核心算法思想是分而治之。快速排序经常会被作为面试题进行考察,通常的考察思路是快排思想、编码实践之手写快排以及进一步对快排的优化。事实上在Java标准库中Arrays类的sort方法里源码也正是使用了优化后的快速排序(具体源码以及优化分析后续会推文讲解),掌握快排算法对于...

weixin_39895995的博客 428

高通MBIM拨号流程简述

高通平台MBIM流程简述

不秃头的程序猿Gabriel的博客 5070

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

快速排序时间复杂度_算法面试八大排序(上)

点击上方 “ 言淦说 ”,选择 “加为星标”第一时间关注各种技术干货!前言八大排序包含:冒泡排序、选择排序、插入排序、快速排序(快排)、归并排序、基数排序、希尔排序、堆排序。本文主要讲述前5种,其中,建议冒泡排序、选择排序、插入排序可以放在一起对比;快速排序和归并排序可以放在一起对比。注:本文的排序采用Golang实现。排序基础1.时间复杂度、空间复杂度以及大O表示法,这里不再赘述2.线...

weixin_39683176的博客 623

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java 快排_八大排序-快速排序(搞定面试之手写快排)

概要快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一。其广泛应用的主要原因是高效,核心算法思想是分而治之。快速排序经常会被作为面试题进行考察,通常的考察思路是快排思想、编码实践之手写快排以及进一步对快排的优化。事实上在Java标准库中Arrays类的sort方法里源码也正是使用了优化后的快速排序(具体源码以及优化分析后续会推文讲解),掌握快排算法对于...

weixin_39765869的博客 345

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

八大排序算法(希尔排序、快速排序、堆排序)

八大排序算法-复杂算法(希尔排序、快速排序、归并排序)希尔排序-插入排序的扩展快速排序-冒泡排序的扩展堆排序 希尔排序-插入排序的扩展 function shellSort(arr) { var len = arr.length; for (var fraction = Math.floor(len / 2); fraction &amp;amp;amp;gt; 0; fraction = Math.floor(fr...

叶素凡 1217

DS初阶:八大排序之堆排序、冒泡排序、快速排序

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法

weixin_51142926的博客 5776
上一篇: 剑指Offer数组习题-合并两个有序数组
下一篇: View绘制流程源码分析-第二篇
丸子哒哒哒
博客等级 码龄12年 31粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值