c++ 快速排序算法【过程图解】
发布时间 - 2026-01-11 01:07:38 点击率:次第一、算法描述

快速排序由C. A. R. Hoare在1962年提出,该算法是目前实践中使用最频繁,实用高效的最好排序算法,
快速排序算法是采用分治思想的算法,算法分三个步骤
1.从数组中抽出一个元素作为基数v(我们称之为划界元素),一般是取第一个、最后一个元素或中间的元素
2.将剩余的元素中小于v的移动到v的左边,将大于v元素移动到v的右边
3.对左右两个分区重复以上步骤直到所有元素都是有排序好。
第二、算法实现
/*序列划分函数*/
int partition(int a[], int p, int r) {
int key = a[r];//取最后一个
int i = p - 1;
for (int j = p; j < r; j++)
{
if (a[j] <= key)
{
i++;
//i一直代表小于key元素的最后一个索引,当发现有比key小的a[j]时候,i+1 后交换
exchange(&a[i], &a[j]);
}
}
exchange(&a[i + 1], &a[r]);//将key切换到中间来,左边是小于key的,右边是大于key的值。
return i + 1;
}
void quickSort(int a[], int p, int r) {
int position = 0;
if (p<r)
{
position = partition(a,p,r);//返回划分元素的最终位置
quickSort(a,p,position-1);//划分左边递归
quickSort(a, position + 1,r);//划分右边递归
}
}
void main() {
int d[] = { 6,4,1,8,7,5 };
cout << "输入数组 { 6,4,1,8,7,5 } " << endl;
quickSort(d, 0, 5);
print_arr(d, 6);
}
两个辅助函数:
void exchange(int * a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void print_arr(int *a, int size) //打印函数
{
cout << "打印数组:";
for (int i = 0; i<size; i++) //打印数组
{
cout << a[i] << " ";
}
cout << endl << endl;
}
测试输出:
第三、算法图解分析
下面我们来具体分析下程序怎么运行的,
quickSort(d, 0, 5);代表以靠最有一个元素5作为基数,
程序初始化时候p=0,r=5,i=-1,j=0,key=5
通过上图我们观察到:
1.i逐渐增加,它一直代表着小于key=5的最后一个元素,j也在主键增加,一直到key前面一个元素停止
2.此时循环到了最后一个元素7,以5为基数的循环已经结束,此时i=1,a[i+1]=6,交换6和5交换,完成本轮循环
返回i+1=2,依索引2为分界线拆分2个数组,进入递归循环,执行类似上图操作
第四、总结
快速排序之所以快,相比冒泡排序他的交换是跳跃式的,它的最差时间复杂度是O(N2) 和冒泡一样,但是它的平均时间复杂度是O(nlog2N),是一种就地排序算法,
看了很多别人写的算法介绍,还是觉的不够清晰,于是决定自己写一篇博文,希望能帮助需要的人快速理解,文章中的用图是自己画的。
以上这篇c++ 快速排序算法【过程图解】就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# c
# 快速排序算法
# C++冒泡排序算法实例
# c++中八大排序算法
# C++选择排序算法实例
# C++堆排序算法的实现方法
# C++归并排序算法实例
# C++选择排序算法实例详解
# 利用C++的基本算法实现十个数排序
# C++插入排序算法实例
# C++实现各种排序算法类汇总
# 一文带你彻底看懂C++常见排序算法
# 递归
# 希望能
# 给大家
# 上图
# 的人
# 是一种
# 看了
# 第一个
# 是有
# 也在
# 最有
# 这篇
# 小编
# 本轮
# 已经结束
# 大家多多
# 切换到
# 写一篇
# 称之为
# 组中
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在万网自助建站平台快速创建网站?
LinuxShell函数封装方法_脚本复用设计思路【教程】
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
如何在Ubuntu系统下快速搭建WordPress个人网站?
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
Laravel怎么实现验证码(Captcha)功能
Java遍历集合的三种方式
Laravel如何实现多对多模型关联?(Eloquent教程)
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
如何快速搭建支持数据库操作的智能建站平台?
香港服务器租用每月最低只需15元?
Python3.6正式版新特性预览
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
Android利用动画实现背景逐渐变暗
bing浏览器学术搜索入口_bing学术文献检索地址
QQ浏览器网页版登录入口 个人中心在线进入
Laravel怎么调用外部API_Laravel Http Client客户端使用
高防服务器租用如何选择配置与防御等级?
如何在云服务器上快速搭建个人网站?
Laravel如何使用Eloquent进行子查询
Android自定义控件实现温度旋转按钮效果
三星网站视频制作教程下载,三星w23网页如何全屏?
Laravel如何生成API文档?(Swagger/OpenAPI教程)
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
如何在万网自助建站中设置域名及备案?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
如何在橙子建站中快速调整背景颜色?
如何用IIS7快速搭建并优化网站站点?
微信小程序 wx.uploadFile无法上传解决办法
zabbix利用python脚本发送报警邮件的方法
Python面向对象测试方法_mock解析【教程】
如何生成腾讯云建站专用兑换码?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
高防服务器如何保障网站安全无虞?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
智能起名网站制作软件有哪些,制作logo的软件?
Laravel如何为API生成Swagger或OpenAPI文档
香港服务器租用费用高吗?如何避免常见误区?
敲碗10年!Mac系列传将迎来「触控与联网」双革新
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性

