CH2_算法性能分析_找出第k小的元素

问题描述:

(必做)给定一个乱序数字列表,编写一个算法复杂度是 O(nlogn)的算法,找出第k小的元素;

(选做)针对该问题,能将算法的时间复杂度优化到线性阶?请说明思路!

要求:(1)编写程序,能够打印数字列表和第k小的元素,给出程序以及输出截图

           (2)算法复杂度可以借助画图/表格/文字等形式表现,必须要有自己的分析

我的答案:

查询了一些排序算法的比较,具体可以参考这篇,写得很详细。各种排序算法复杂度比较_zhc_24的博客-CSDN博客_排序算法复杂度

最后选择研究归并排序,先分割再集成,将所有数据用递归的方式排成递归树,每层最多进行n次比较,一共最多logn层,时间复杂度为O(nlogn)。

def merge(arr, l, m, r):
    n1 = m - l + 1
    n2 = r - m

    L = [0] * (n1)  # 临时数组L和R
    R = [0] * (n2)
    for i in range(0, n1):  # 拷贝数据
        L[i] = arr[l + i]
    for j in range(0, n2):
        R[j] = arr[m + 1 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值