第八章 排序 五、快速排序

news2024/7/4 5:43:49

目录

一、算法思想

二、例子

三、代码实现

四、验证

五、算法效率分析

1、时间复杂度

​编辑

2、空间复杂度

3、小结

4、优化思路

5、稳定性

六、总结


一、算法思想

首先,选取一个数作为序列的基准数,分别定义序列的第一个数和最后一个数为low和high,让它们与基准数进行比较,如果low小于基准数,则low指针右移,反之将low指针所指元素移动到high指针所指的地方,high指针同理,以形成左边的序列都比基准数小,右边的序列都比基准数大。

二、例子

1、我们将此序列使用快速排序进行升序排序

、2、选取49作为基准数,并将其存入缓存变量

3、左移high指针,让27与基准数49进行比较,27比49小,则把27移动到low所指的位置

4、此时high指针为空,我们切换到low指针进行比较,让27与49比较,发现它小于49,所以low指针右移,38同理,当移动到65时,发现65大于49,所以将65放在high指针处

5、此时low指针处为空,于是我们切换到high指针,将high指针右移,让它与13比较,将13移动到low指针处

6、切换到low指针,将low右移,97比49大,所以97移动到high指针处

7、右移high,直到与low相遇,此时我们得到了基准数49应该存放的位置为3

8、于是我们将序列划分为了两个部分

9、然后我们再次对划分后的两部分分别取基准数27和76,再次进行划分

10、最终得到

三、代码实现

#include "bits/stdc++.h"
using namespace std;

int Partition(int a[],int low,int high){//划分函数
    int pivot = a[low];//把第一个数作为基准数
    while(low<high){
        while (low<high && a[high]>=pivot)--high;//从右边开始,找到比基准数小的数
        a[low] = a[high];//放到左边
        while (low<high && a[low]<=pivot)++low;//从左边开始,找到比基准数大的数
        a[high] = a[low];//放到右边
    }
    a[low] = pivot;//当把所有数划分为两边后,也就找到了基准数的位置,将基准数插入中间
    return low;//返回划分位置的下标
}

void QuickSort(int a[],int low,int high){
    if (low<high){//当符合排序条件时
        int pivot = Partition(a,low,high);//将序列划分
        QuickSort(a,low,pivot-1);//对左半子序列进行递归排序
        QuickSort(a,pivot+1,high);//对右半子序列进行递归排序
    }
}

int main(){
    int count,arr[10];
    scanf("%d",&count);//输入数组长度
    for (int i = 0; i < count; ++i) {
        scanf("%d",&arr[i]);//输入数组
    }
    QuickSort(arr,0,count-1);//调用排序函数
    for (int i = 0; i < count; ++i) {
        printf("%d ",arr[i]);//输出数组
    }
    return 0;
}

四、验证

五、算法效率分析

1、时间复杂度

2、空间复杂度

3、小结

最坏的情况是序列本身就是顺序或逆序的

4、优化思路

5、稳定性

不稳定

六、总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1063533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go Gin Gorm Casbin权限管理实现 - 1. Casbin概念介绍以及库使用

1. 核心概念 核心配置中含两部分模型配置以及策略配置&#xff0c;给出两个示范配置&#xff0c;在此基础上对实际请求进行分析。 1.1 Model 模型文件&#xff0c;存储了请求定义(request_definition)&#xff0c;策略定义(policy_definition)&#xff0c;匹配规则(matchers)&a…

黑豹程序员-架构师学习路线图-百科:AJAX

文章目录 1、什么是AJAX2、发展历史3、工作原理4、一句话概括 1、什么是AJAX Ajax即Asynchronous&#xff08;呃森可乐思&#xff09; Javascript And XML&#xff08;异步JavaScript和XML&#xff09; 在 2005年被Jesse James Garrett&#xff08;杰西詹姆斯加勒特&#xff09…

Yolov5 ONNX导出报错: export failure: Unsupported ONNX opset version: 17

目录 1.问题描述 1.1 报错1 &#xff1a; 1.2 报错 2 2.解决方案 介绍 ONNX&#xff08;Open Neural Network Exchange&#xff09;是一个用于机器学习模型的开放式标准&#xff0c;它旨在使不同的深度学习框架能够将训练好的模型在不同平台上无缝运行。它是由Microsoft和F…

第二课 前缀和、差分、双指针扫描

文章目录 第二课 前缀和、差分、双指针扫描lc1.两数之和--简单题目描述代码展示 lc11.盛最多水的容器--中等题目描述代码展示 lc15.三数之和--中等题目描述代码展示 lc42.接雨水--困难题目描述代码展示 lc53.最大子数组和--中等题目描述代码展示 第二课 前缀和、差分、双指针扫…

基于goravel的CMS,企业官网通用golang后台管理系统

2023年9月11日10:47:00 仓库地址&#xff1a; https://gitee.com/open-php/zx-goravel-website 框架介绍 Goravel SCUI 后端开发组件 go 1.20 Goravel 1.13 数据库 sql(使用最新日期文件) goravel\doc\sql_bak mysql 8.0 前端开发组件 scui 1.6.9 node v14.21.3 效果图…

凉鞋的 Unity 笔记 106. 第二轮循环场景视图Sprite Renderer

106. 第二轮循环&场景视图&Sprite Renderer 从这一篇开始&#xff0c;我们开始进行第二轮循环。 这次我们至少能够在游戏运行窗口看到一些东西。 首先还是在场景层次窗口进行编辑&#xff0c;先创建一个 Sprite&#xff0c;操作如下: 创建后&#xff0c;会在 Scene …

【锁的区别】C++线程库和POSIX线程库锁的区别

C线程库和POSIX线程库锁的区别 C线程库代码段的互斥&#xff1a;mutex、recursive_mutex、timed_mutex、recursive_timed_mutex互斥量mutex&#xff1a;直接进行lock()或者unlock()递归互斥锁recursive_mutex&#xff1a;可以多次加锁&#xff0c;意味着加几次锁就需要解几次锁…

华为MateBook13 2021款(WRTD-WFE9)原装出厂Win10系统工厂模式安装包(含F10智能还原)

下载链接&#xff1a;https://pan.baidu.com/s/1yL7jFbklrln0UqWqxQ7fcw?pwd9nm1 系统自带一键智能还原功能、带有指纹、声卡、显卡、网卡等所有驱动、出厂主题壁纸、系统属性华为专属LOGO标志、Office办公软件、华为电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U…

公众号留言插件有哪些?有哪些好用的小程序?

为什么公众号没有留言功能&#xff1f;2018年2月12日&#xff0c;TX新规出台&#xff1a;根据相关规定和平台规则要求&#xff0c;我们暂时调整留言功能开放规则&#xff0c;后续新注册帐号无留言功能。这就意味着2018年2月12日号之后注册的公众号不论个人主体还是组织主体&…

全能视频工具 VideoProc Converter 4K for mac中文

VideoProc 4K提供快速完备的4K影片处理方案&#xff0c;您可以透过这款软体调节输出影片格式和大小。能够有效压缩HD/4K影片体积90%以上&#xff0c;以便更好更快地上传到YouTube&#xff0c;或是通过电子邮件附件发送。业界领先的视讯压缩引擎&#xff0c;让你轻松处理大体积视…

基于可解释性特征矩阵与稀疏采样全局特征组合的人体行为识别

论文还未发表&#xff0c;不细说&#xff0c;欢迎讨论。 Title: A New Solution to Skeleton-Based Human Action Recognition via the combination usage of explainable feature extraction and sparse sampling global features. Abstract: With the development of deep …

一个.NET开发的开源跨平台二维码生成库

虽然已经有很多生成二维码的解决方案&#xff0c;但是它们大多依赖System.Drawing&#xff0c;而.NET 6开始&#xff0c;使用System.Drawing操作图片&#xff0c;在生成解决方案或打包时&#xff0c;会收到一条警告&#xff0c;大致意思是System.Drawing仅在 ‘windows’ 上受支…

完美清晰,炫酷畅享——Perfectly Clear Video为你带来卓越的AI视频增强体验

在我们日常生活中&#xff0c;我们经常会拍摄和观看各种视频内容&#xff0c;无论是旅行记录、家庭聚会还是商务演示&#xff0c;我们都希望能够呈现出最清晰、最精彩的画面效果。而现在&#xff0c;有一个强大的工具可以帮助我们实现这一目标&#xff0c;那就是Perfectly Clea…

Spring IoC容器及原理

Spring IoC容器及原理 目录 Spring IoC容器及原理 Spring BeanFactory容器 Spring ApplicationContext容器 Spring容器是Spring框架的核心。容器将创建对象&#xff0c;它们连接在一起&#xff0c;配置它们&#xff0c;并从创建到销毁管理他们的整个生命周期。在Spring容器…

大压缩作用下软基底薄膜周期性分层现象的研究

引言 通过实验、理论模型和有限元模拟的结合&#xff0c;英思特通过将一个薄膜粘接到一个预应变超过400%的软弹性衬底上&#xff0c;探索了微观和宏观尺度上控制周期性屈曲脱层形成和发展的机理。我们发现&#xff0c;在大的基底预应变释放时&#xff0c;膜中的变形遵循三阶段…

好用的截图软件Snipaste2.7.3

官网 Snipaste - 截图 贴图 下载 使用 解压 打开64位 双击运行 查看快捷键&#xff1a;选择图标&#xff0c;右键&#xff0c;弹出查看菜单

CDN体系架构及部署方案探索

如今是科技技术飞速发展的时代&#xff0c;特别是互联网技术在各个方面都得到了质的提升。对于CDN技术来说&#xff0c;该项技术的基本功能、体系构架以及运营部署等方面都取得了长足的发展&#xff0c;不仅技术日新月异&#xff0c;而且整个体系日趋成熟&#xff0c;并且不断朝…

最新Uniapp软件社区-全新带勋章源码

测试环境&#xff1a;php7.1。ng1.2&#xff0c;MySQL 5.6 常见问题&#xff1a; 配置好登录后转圈圈&#xff0c;检查环境及伪静态以及后台创建好应用 上传图片不了&#xff0c;检查php拓展fileinfo 以及public文件权限 App个人主页随机背景图&#xff0c;在前端uitl文件夹里面…

Python柱形图

柱形图 柱形图&#xff0c;又称长条图、柱状统计图、条图、条状图、棒形图&#xff0c;是一种以长方形的长度为变量的统计图表。长条图用来比较两个或以上的价值&#xff08;不同时间或者不同条件&#xff09;&#xff0c;只有一个变量&#xff0c;通常利用于较小的数据集分析…

C语言之自定义类型_结构体篇(1)

目录 什么是结构&#xff1f; 结构体类型的声明 常规声明 特殊声明-匿名结构体 结构体变量的定义和初始化和访问 定义 初始化 访问 嵌套结构体 结构体的自引用 什么是结构体的自引用 NO1. NO2. 热门考点&#xff1a;结构体内存对齐 产生内存对齐 NO1 NO2 …