快排算法QuickSort研究

针对快速排序算法执行耗时的分析

阅读某道数据结构考研书时发现一题:已知当前排序算法为快速排序算法,问ABCD所给出的4个序列,哪一个排序最快,哪一个最慢。个人认为答案分析欠妥,遂做些实验进行分析。


实验的快排代码

def partition(a, low, high):
    tmp = a[low]
    while low < high:
        while low < high and a[high] >= tmp:
            high -= 1
        a[low] = a[high]
        while low < high and a[low] <= tmp:
            low += 1
        a[high] = a[low]
    a[low] = tmp
    return low


def quick_sort(a, start, end):
    if start < end:
        pos = partition(a, start, end)
        quick_sort(a, 0, pos - 1)
        quick_sort(a, pos + 1, end)

实验设定随机生成一个长度为15的数组a,对a按照升序进行排序后存为b降序排序后存为c,实验需求为升序排序。
实验中,每个数组执行快排10w次,分别统计执行时间。
在这里插入图片描述


分析

  1. 若当前序列关键字有序,且与需求中的顺序相同,则用时一般较少(序列升序 / 降序,题目要求结果恰好也为升序 / 降序);
  2. 若当前序列关键字有序,但与需求中的顺序相反,则用时一般较多(序列升序 / 降序,题目要求结果反而变为降序 / 升序);
  3. 其余情况介于两者之间。

晚上进行了100w次的实验,结果反而表现出了随机性:

Random list under QuickSort time:  0:14:57.409429
Sorted list under QuickSort time:  0:14:42.841151
Sorted reverse list under QuickSort time:  0:14:46.816652

总结

快速排序算法执行用时和需求与序列状态有一定关系,但不是绝对的。
若当前序列关键字有序,且与需求中的顺序相同,则用时一般较少(序列升序 / 降序,题目要求结果恰好也为升序 / 降序)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值