没有合适的资源?快使用搜索试试~ 我知道了~
首页快速排序算法实验分析报告
快速排序算法实验分析报告
4星 · 超过85%的资源 需积分: 34 26 下载量 146 浏览量
更新于2023-06-04
2
收藏 522KB PDF 举报
本报告详细分析了快速排序算法的复杂度T(n),算法具有一定的不稳定性,让你全面了解快速排序算法,利用图像、文字说明。。
资源详情
资源推荐
算 法 实 验 分 析 报 告
作者——12 软件工程 Hua_san
关于快速排序排序(QuickSort)算法分析实验
一、实验目的
检验快速排序(QuickSort)算法效率理论分析的正确性
二、实验平台
软件:Microsoft Visual C++6.0 + Microsoft Office
硬件:CPU:Core(TM) i7-3630QM CPU @ 2.40GHz 内存:DDR3 1*4G 1333MHz
三、实验方法
计数法:本实验采用计数法,在排序算法中插入计数器,用于统计基本语句
执行次数。
实验数据产生方法:本实验只需输入排序数据的规模,动态分配数组,利用
随机函数(rand)来产生实验数据,rand 产生数据时候,使用系统时
间作为种子( srand((int)time(NULL)); ),使每次产生的随机数都
各不相同。从而更好的去达到实验目的。
四、实验原理
快速排序算法伪代码描述:
算法:快速排序算法 QuickSort
算法输入:一个整数 n(输入问题的规模,自动产生随机数据)
算法输出:排序过程交换的次数 count 及有序序列
1.显示人机交互界面,要求用户输入问题规模 n
2.初始化(按问题输入规模产生 n 个整型数据存入 number[n])
3.如果序列中不止一个数,进行如下递归划分子串
3.1 以 pivot(轴值)为基准,划分左右两个子序列
3.1.1 将 i,j 分别指向序列第一个整数和最后一个整数
3.1.2 重复以下过程,知道 i 等于 j
3.1.2.1 从右侧 j 开始扫描,直到 j 指向整数 < i 指向整数
3.1.2.2 如果 i<j,r[i]和 r[j]交换
3.1.2.3 左侧从 i 开始扫描,直到 i 指向整数 > j 指向整数
3.1.2.4 如果 i<j,r[i]和 r[j]交换
3.1.3 返回轴值:return i;
3.2 递归划分左子串
3.3 递归划分右子串
4.子串划分直到每个子串都只有一个数时,划分结束
5.合并子串
五、实验理论分析
主定理:令 和 是常数,
是一个函数,
是定义在非负整
数上的递归公式:
算 法 实 验 分 析 报 告
作者——12 软件工程 Hua_san
其中,我们将 /b 解释为
或
。那么 T(n)有如下渐进界:
1. 若对某个常数 有
,则
2. 若
,则
。
3. 若对某个常数 有
,且对某个常数 和所有足够
大的 n 有
,则
① 最好情况
对于规模为的序列排序,如果每次划分过程产生的左右子序列规模都不
大于,其中一个子序列规模为
,另一个子问题的规模为
。
在这种情况下,快速排序的性能非常好。这时有:
在上式中,我们忽略一些余项和减 1 操作的影响,根据以上主定理的
情况 2,上述递归式的解为
。
② 最坏情况
对于规模为 n 的序列排序,当划分产生两个子序列规模分别为 n-1 和 0
时,将产生快速排序(QuickSort)的最坏情况。则有递归式:
其中
因为每次划分总得到规模比父序列少 1 的子序列。第一次划分得到规模
为 n-1 的子序列。所以参数 q 的变化范围从 0 到 n-1。假设
成立,
其中 c 为常数,将其带入递归式得
其中
其中
表达式
在参数取值期间 的端点上取得最
大值(由于该表达式对于 q 的二阶导数是正的)。我们可以得到表达式的上界
其中
将其带入上式
中,得到
我们可以选择一个足够大的常数 c,使得
项。所以有
.
③ 平均情况
快速排序的平均情况比较不稳定,要想清楚求解,我们就要对遇到的各
种输入作个假设。假设输入数据的所有排列都是等可能的。对一个随机的输
算 法 实 验 分 析 报 告
作者——12 软件工程 Hua_san
入序列进行快速排序时,使每次划分结果相同是不太可能的。平均情况下,
在划分中既有“好的”,又有“差的”,好、差划分是随机地分布在各次划分
序列中。假设好、差划分交替出现每次划分的结果中,且好的划分是最佳情
况划分,而差的划分是最坏情况下的划分。假设第 i 次划分的代价为 n,划
分出来的两个子序列规模分别为 n-1 和 1,即最坏情况。下一次对规模为 n-1
的子序列按最佳情况划分,得到规模为
和
两个子序列。
在一个差的划分后接一个好的划分后,产生出三个子序列,规模分别为 1,
和(
,代价共为
,结果是一个好的划分。
这样,当好、差划分交替分布划分都是好的一样。
所以:
快速排序算法效率平均情况和最好情况相同为:
六、实验结果
函数 y=1.25n·lgn 取
,即小数忽略不计,得到如下表
输入规模 n
100
300
500
700
900
1100
1300
1500
1700
交换次数
224
890
1698
2424
3288
4191
5174
5965
6807
y=1.25n·lgn
250
928
1686
2489
3323
4181
5060
5955
6864
由以上数据可画出下图
图 1 QuickSort 交换次数 与 函数 y=c(nlgn)的对比图(其中 c =1.25)
剩余10页未读,继续阅读
Hua_san_
- 粉丝: 2
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- VMP技术解析:Handle块优化与壳模板初始化
- C++ Primer 第四版更新:现代编程风格与标准库
- 计算机系统基础实验:缓冲区溢出攻击(Lab3)
- 中国结算网上业务平台:证券登记操作详解与常见问题
- FPGA驱动的五子棋博弈系统:加速与创新娱乐体验
- 多旋翼飞行器定点位置控制器设计实验
- 基于流量预测与潮汐效应的动态载频优化策略
- SQL练习:查询分析与高级操作
- 海底数据中心散热优化:从MATLAB到动态模拟
- 移动应用作业:MyDiaryBook - Google Material Design 日记APP
- Linux提权技术详解:从内核漏洞到Sudo配置错误
- 93分钟快速入门 LaTeX:从入门到实践
- 5G测试新挑战与罗德与施瓦茨解决方案
- EAS系统性能优化与故障诊断指南
- Java并发编程:JUC核心概念解析与应用
- 数据结构实验报告:基于不同存储结构的线性表和树实现
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功