快速排序(Quick-Sort)

2023-11-10

快速排序(Quick-Sort)

对于包含n个数的数组来说,快速排序是一种最坏情况下时间复杂度为O(n²)的排序算法。虽然最坏情况下的时间复杂度很差,但是快速排序通常是实际应用中最好的选择,因为它的平均性能非常好
下面是算法导论中给出的快速排序的伪代码:
QUICK-SORT(A,p,r)
  if p < r
  q = PARTITION(A,p,r)
  QUICK-SORT(A,p,q - 1)
  QUICK-SORT(A,q + 1,r)

PARTITION(A,p,r)
  x = A[r]
  i = p - 1
  for j = p to r - 1
    if A[j] <= x
      i = i + 1
      exchange A[i] with A[j]
  exchange A[i + 1] with A[r]
  return i + 1

下面是快速排序的Java实现:

/**
 * Created by CvShrimp on 2017/10/12.
 */
public class QuickSort {
    public static int partition(int[] array, int p, int r) {
        int i = p - 1;
        for(int j = p; j < r; j++) {
            if(array[j] <= array[r]) {
                i++;
                swapArrayElement(array, i, j);
            }
        }
        i++;
        swapArrayElement(array, i, r);
        return i;
    }

    public static void quickSort(int[] array, int p, int r) {
        if(p < r) {
            int q = partition(array, p, r);
            quickSort(array, p, q - 1);
            quickSort(array, p + 1, r);
        }
    }

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

    public static void main(String[] args) {
        int[] array = {1,6,10,5,666,4,66,666};
        QuickSort.quickSort(array, 0, array.length - 1);
        System.out.print("Sorted result: ");
        for(int temp : array) {
            System.out.print(temp + " ");
        }
        System.out.println();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速排序(Quick-Sort) 的相关文章

  • 算法设计与分析考试复习

    冒泡排序 排序思路 1 从第0个元素开始 每次用相邻的两个元素进行比较 2 一旦发现后面的一个元素小于我们前面的一个元素就交换位置 3 经过一轮冒泡排序比较之后最后一个元素就是最大值 4 排除最后一个元素 以此类推 每次比较完成后最大值都会
  • 堆排序(Heapsort)-- 高级排序算法

    1 堆排序 Heapsort 堆排序 Heapsort 是指利用堆这种数据结构所设计的一种排序算法 二叉堆本质上是一种完全二叉树 它分为两个类型 最大堆和最小堆 最大堆任何一个父节点的值 都大于等于它左右孩子节点的值 最小堆任何一个父节点的
  • 多益网络2022春笔试题记忆版

    多益网络笔试题 自己做完之后凭记忆整理出来的 填空题 数据结构 数据库 相对没那么难 所以只记了几个 选择题 1 A B C栈的出栈序列可能性有几种 2 关于队列 3 插入数据库表 name char 20 not null age cha
  • (SUB)选择排序时间、空间复杂度

    基本思想 将一组数据分为两部分 前面是已排序部分 后面是未排序部分 初始状态可认为位置 0 为已排序部分 数组下标从0开始 其余为未排序部分 每一次都从未排序部分选择一个最小元素放在已排序部分的末尾 然后已排序部分增加一个元素 未排序部分减
  • 七大经典排序算法总结【详解】

    排序算法的分类 插入排序 选择排序 交换排序 归并排序 具体分类如图所示 这七种排序算法在我们生活中应用非常广泛 所用的场景各有不同 他的时间复杂度和空间复杂度也是不同的 一 插入排序 初始数据越接近有序 时间效率越高 1 直接插入排序 直
  • 快速排序(C语言简单实现)

    快速排序 C语言简单实现 快速排序 Quick Sort 是冒泡排序的升级版 基本思想 通过一趟排序将待排记录分割成独立的两部分 其中一部分记录的关键字均比另一部分记录的关键字小 则可分别对这两部分记录继续进行排序 以达到整个序列有序的目的
  • 用C语言编写一段堆排序算法

    include
  • R语言基本函数的学习(持续更新)

    目录 前言 Tidyverse包 arrange 函数 head 函数 filter 函数 select 函数
  • Java排序算法:选择排序

    Java排序算法 选择排序 选择排序它的主要思想是 在未排序的数组中选择最小的元素 然后将其放置在数组的起始位置 再在剩余的未排序数组中选择最小元素 并将其放置在已排序部分的末尾 重复此过程 直到整个数组排序完成 选择排序的步骤如下 1 从
  • 8-13外部排序-败者树

    败者树是树形选择排序的一种变体 可视为一棵完全二叉树 通过败者树 可以在k个归并段中选出最小关键字所需要的关键字对比次数更少 绿色为叶子结点 存放初始数据 黑色为失败结点 蓝色为胜出结点 一 基本过程 以下按从小到大的方式构建 1 从8个归
  • 【Java】5大排序算法总结(插入排序+希尔排序+选择排序+堆排序+冒泡排序)

    快速导航 1 稳定性 2 插入排序 3 希尔排序 4 选择排序 5 堆排序 6 冒泡排序 1 稳定性 两个相等的数据 如果经过排序后 排序算法能保证其相对位置不发生变化 则我们称该算法是具备稳定性的排序算法 图中排序后a仍然在b前面 此时这
  • C++ 快速排序

    快速排序是比较常用的一种排序 平均时间复杂度为O nlogn 最坏的时间复杂度为O n 话不多说 上代码 include
  • 用 Java 实现的八种常用排序算法

    八种排序算法可以按照如图分类 前置知识 1 算法稳定性 在一个序列中 能保证两个相等的数 经过排序之后 其在序列的前后位置顺序不变 A1 A2 排序前 A1 在 A2 前面 排序后 A1 还在 A2 前面 2 时间复杂度 时间复杂度是用于衡
  • 数据结构——哈希排序

    哈希排序 就是用空间换取时间的一种排序方式 空间利用率达O n 算法思想 如果一个元素序列a里没有重复的元素 而我们需要找最大值或者前几个最大值时 怎么办呢 1 将这个a序列排序 然后直接选出目标值 2 开辟一个b数组 a里的每一个元素对应
  • 全面分析冒泡排序过程

    冒泡排序也是一种简单直观的排序算法 其思想是 它重复地走访过要排序的数列 一次比较两个元素 如果他们的顺序错误就把他们交换过来 走访数列的工作是重复地进行直到没有再需要交换 也就是说该数列已经排序完成 这个算法的名字由来是因为越小的元素会经
  • 快速排序算法详解(原理,时间复杂度,实现代码)

    快速排序算法详解 原理 实现和时间复杂度 快速排序是对冒泡排序的一种改进 由 C A R Hoare Charles Antony Richard Hoare 东尼 霍尔 在 1962 年提出 快速排序的基本思想是 通过一趟排序将要排序的数
  • 删除C++ std::string字符串中的空格

    介绍一个使用标准库算法删除std string字符串中空格的方法 代码如下 std string str1 Hello world str1 erase std remove if str1 begin str1 end unsigned
  • 插入排序超详解释,一看就懂

    目录 一 插入排序的相关概念 1 基本思想 2 基本操作 有序插入 二 插入排序的种类 三 直接插入排序 1 直接插入排序的过程 顺序查找法查找插入位置 2 使用 哨兵 直接插入排序 四 直接插入排序算法描述 五 折半插入排序 1 查找插入
  • 数据结构算法-快速排序

    核心思路 快速排序算法核心思路 选择一个 基准 元素 将数组分为两个子数组 一个包含比基准小的元素 另一个包含比基准大的元素 然后对这两个子数组进行递归排序 基准数 初始化两个索引 i 和 j 分别子数组的开头和结尾 初始化基准元素 bas
  • 数据结构算法-快速排序

    核心思路 快速排序算法核心思路 选择一个 基准 元素 将数组分为两个子数组 一个包含比基准小的元素 另一个包含比基准大的元素 然后对这两个子数组进行递归排序 基准数 初始化两个索引 i 和 j 分别子数组的开头和结尾 初始化基准元素 bas

随机推荐

  • Linux·i2c驱动示例

    I2C 是很常用的一个串行通信接口 常用于连接各种外设 传感器等器件 一 Linux I2C 驱动框架 Linux 内核将 I2C 驱动分为两部分 I2C 总线驱动 I2C 总线驱动就是 SOC 的 I2C 控制器驱动 也叫做 I2C 适配
  • 原型和原型链

    1 原型 原型 prototype 一个对象 概念 每一个函数上 都有一个prototype 原型对象 使用场景 一般使用在构造函数上 如果给构造函数的原型prototype添加方法 构造函数构造出来的对象就能共享原型上所有的方法 var
  • 写一篇关于OpenAi基金的介绍

    OpenAI基金是由业界领先的技术领导者组成的非营利性机构 旨在推进人工智能的发展 以此来改善人类的生活 OpenAI的目标是建立开放 可靠的智能机器 能够推动人类的发展 改善生活质量和解决全球性问题 OpenAI通过支持研究和发展人工智能
  • Linux SPI总线和设备驱动架构之一:系统概述

    origin http blog csdn net droidphone article details 23367051 SPI是 Serial Peripheral Interface 的缩写 是一种四线制的同步串行通信接口 用来连接微
  • Linux驱动开发——(使用中断处理)gpio(6)

    Linux内核中断编程 为什么会有中断机制 中断产生的根本原因就是因为外设的数据处理速度远远慢于CPU 比如使用CPU读取UART接收缓冲区的数据 当使用CPU读取UART接收缓冲区的数据时 发现UART接收缓冲区的数据并没有准备就绪 一般
  • 在CentOS / RHEL上安装ThingsBoard CE

    在CentOS RHEL上安装ThingsBoard CE 1 安装之前 硬件要求 要在一台机器上运行ThingsBoard和PostgreSQL 您将至少需要1Gb RAM 要在单台计算机上运行ThingsBoard和Cassandra
  • RocksDB源码分析之db_test LevelReopenWithFIFO

    TEST F DBTest LevelReopenWithFIFO const int kLevelCount 4 const int kKeyCount 5 const int kTotalSstFileCount kLevelCount
  • Python正则表达式入门

    Python3 正则表达式 正则表达式是一个特殊的字符序列 它能帮助你方便的检查一个字符串是否与某种模式匹配 本文主要阐述re包中的主要函数 在阐述re包中的函数之前 我们首先看议案正则表达式的模式 即使用特殊的语法来表示一个正则表达式 1
  • Unity导入模型后模型动画无法勾选loop time

    导入模型后发现动画无法勾选 点击edit跳转到 原因不明 但可以直接选中动画后 ctrl d复制一个 然后就可以编辑
  • 在ubuntu虚拟机环境上搭建nginx服务器

    1 1安装nginx sudo apt install nginx 检查是否安装 nginx v nginx文件安装完成之后的文件位置 usr sbin nginx 主程序 etc nginx 存放配置文件 usr share nginx
  • vue开发,node.js启动报错‘digital envelope routines

    vue开发 node js启动报错 digital envelope routines 最近在学习vue 打算使用node js启动一下自己的vue项目 毕竟 现在主流的都是这个本地服务器 肯定有它的好处 但是启动总是报错 各种错误 耐住性
  • 第三章 搜索策略——博弈树的启发式搜索

    1 概述 博弈是一类具有智能行为的竞争活动 如下棋 打牌 战争等 博弈可分为双人完备信息博弈和机遇性博弈 所谓双人完备信息博弈 就是两位选手对垒 轮流走步 每一方不仅知道对方已经走过的棋步 而且还能估计出对方未来的走步 对弈的结果是一方赢
  • vue生命周期

    vue生命周期学习
  • HIVE中map类型操作

    HIVE中map类型操作 前言 今天写了一下hive中map类型字段 如何在原有基础上在增加新的值 1 建表 代码如下 示例 create table aa test name string age int source map
  • TCP协议采用三次握手建立链接与断开链接

    OSI参考模型中的网络层 在TCP IP协议中 TCP协议提供可靠的连接服务 采用三次握手建立一个连接 建立TCP连接的过程需要进行三次信息交换 通常称为 三次握手 示意图如下 图中Seq代表TCP段首部中的 序号 Sequence Num
  • usb大容量储存设备驱动_U盘插入电脑识别不出来?教你3个解决方法,修复USB驱动程序...

    应该很多人都有遇到过这样的问题 就是将U盘插入自己电脑的时候没反应 也不会在磁盘内显示盘符 但是将U盘插入别人的电脑里面可以打开 如果出现这样的问题 可能就是电脑里面的驱动程序出现了问题 下面我们一起来看看解决方法 方法一 卸载USB设备
  • MySQL 数据库基本操作-DML

    一 基本介绍 DML是指数据操作语言 用来对数据库中表的数据记录进行更新 关键字 插入 insert 删除 delete 更新 update 二 数据插入 语法格式 向表中插入某些列 insert into 表 列名1 列名2 列名3 va
  • CSND搬家到------->博客园(在博客园写作&&技术交流)

    后续就在博客园整理笔记和技术交流啦 已经把CSDN相关的文章全部整理发布到博客园 点击去康康博主的新家 之前很多人通过qq与博主联系 由于各种原因在QQ上不能够及时解答疑惑 现在大家可以通过如下方式在博客园与博主交流哦 我会经常去看博客园消
  • 基于Hexo和Butterfly创建个人技术博客,(13) 第一阶段总结,Hexo和Butterfl详细配置

    Butterfly官方网站 请 这里 Hexo官司网查看 这里 前面通过10节的课程梳理了hexo和butterfly用到的所有知识 虽经过了梳理但内容还是比较多 所以本章给出一个前10章的一个小结 因涉及一些个人信息 所有部分配置项换成了
  • 快速排序(Quick-Sort)

    快速排序 Quick Sort 对于包含n个数的数组来说 快速排序是一种最坏情况下时间复杂度为O n 的排序算法 虽然最坏情况下的时间复杂度很差 但是快速排序通常是实际应用中最好的选择 因为它的平均性能非常好 下面是算法导论中给出的快速排序