• 【路飞学城Day170】算法小结


    Evernote Export

    算法的思想是能省则省,内存能少则少,时间运行能少尽量少
    堆排序的时间复杂度O(nlogn)
    堆排序的内置模块heapq
    常用函数 heapify(x)
    heappush(heap, item)
    heappop(heap)
    topkey问题
    现在有n个数,设计算法得到前k大的数(k>n)
    解决思路: 
        排序后切片  O(nlogn)
        排序lowB三人组 O(kn)
        堆排序 O(nlogk)
    堆排序解决思路
        取列表前k个元素建立一个小根堆,堆顶就是目前第k大的数
        一次向后遍历原列表,对于列表中的元素,如果小于堆顶,则忽略该元素,如果大于堆顶,则将堆顶更换为该元素,并且对堆进行一次调整
    归并排序
    假设现在的列表分两段有序,如何将其合成为一个有序列表
    归并排序
    分解:将列表越分越小,直至分成一个元素
    终止条件:一个元素是有序的
    合并:将两个有序列表归并,列表越来越大

    三种排序算法小结
    时间复杂度都是O(logn)
    一般情况下,就运行时间而言:快速排序<归并排序<堆排序
    三种排序算法的缺点:
    快速排序:极端情况下排序效率低
    归并排序:需要额外的内存开销
    堆排序:在快的排序算法中相对较慢
     
    排序方法
    时间复杂度
    空间复杂度
    稳定性
    代码复杂度
    最坏情况
    平均情况
    最好情况
    冒泡排序
    O(n^2)
    O(n^2)
    O(n)
    O(1)
    稳定
    简单
    直接选择排序
    O(n^2)
    O(n^2)
    O(n^2)
    O(1)
    不稳定
    简单
    直接插入排序
    O(n^2)
    O(n^2)
    O(nlogn)
    O(1)
    稳定
    简单
    快速排序
    O(n^2)
    O(nlogn)
    O(nlogn)
    平均情况O(logn);
    最坏情况O(n)
    不稳定
    较复杂
    堆排序
    O(nlogn)
    O(nlogn)
    O(nlogn)
    O(1)
    不稳定
    复杂
    归并排序
    O(nlogn)
    O(nlogn)
    O(nlogn)
    O(n)
    稳定
    较复杂
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    Win a contest, win a challenge
  • 相关阅读:
    促仅开发者间交流与合作的胡思乱想
    Unity3D音乐音效研究-MIDI与波表
    剑英陪你玩转图形学 (二)彩虹
    java mail实现Email的发送,完整代码
    linux 下 安装 rpm 格式 的 mysql
    ExtJs3带条件的分页查询的实现
    查看linux的版本信息
    java 非法字符过滤 , 半角/全角替换
    MySQL数据库错误server_errno=2013的解决
    MySQL数据库双机热备份
  • 原文地址:https://www.cnblogs.com/pandaboy1123/p/10091906.html
Copyright © 2020-2023  润新知