#归并排序
def mergeSort(a,L,R) :
    if(L>=R) :
        return
    mid=((L+R)>>1)
    mergeSort(a,L,mid)
    mergeSort(a,mid+1,R)
    p=L
    q=mid+1
    t=[]
    while(p<=mid and q<=R) :
        if a[p]<=a[q] :
            t.append(a[p])
            p+=1
        if a[p]>a[q] :
            t.append(a[q])
            q+=1
    while (p<=mid) :
        t.append(a[p])
        p+=1
    while(q<=R) :
        t.append(a[q])
        q+=1
    cur=0
    for i in range(L,R+1) :
        a[i]=t[cur]
        cur+=1 a=[2,3,5,1,5]
mergeSort(a,0,4)
print a #快速排序
import random def Qsort(a) :
    if a==[] :
        return []
    val=random.choice(a)
    return Qsort([x for x in a if x<val]) + [x for x in a if x==val] +Qsort([x for x in a if x>val]) a=[1,3,4,6,2,4]
a=Qsort(a) #堆排
def heapAjust(a,pos,sz) :
    if(pos>sz/2) :
        return
    Lchild=pos*2
    Rchild=pos*2+1
    Max=pos
    if(Lchild<=sz and a[Lchild]>a[Max]) :
        Max=Lchild
    if(Rchild<=sz and a[Rchild]>a[Max]) :
        Max=Rchild
    if(Max!=pos) :
        a[Max],a[pos]=a[pos],a[Max]
        heapAjust(a,Max,sz)
    
def buildHeap(a,sz) :
    for i in range(sz/2,0,-1) :
        heapAjust(a,i,sz)
def heapSort(a,sz) :
    buildHeap(a,sz)
    for i in range(sz,0,-1) :
        a[i],a[1]=a[1],a[i]
        heapAjust(a,1,i-1) a=[0,1,2,5,3,4,6]
heapSort(a,6)
print a

python 快排,堆排,归并的更多相关文章

  1. 【js基础】js排序方法——快排+堆排+插排+选择排

    快排 Array.prototype.fastSort = function(){ var arr = this; function sort(left, right, arr){ if( left ...

  2. 排序算法C语言实现——冒泡、快排、堆排对比

    对冒泡.快排.堆排这3个算法做了验证,结果分析如下: 一.结果分析 时间消耗:快排 < 堆排 < 冒泡. 空间消耗:冒泡O(1) = 堆排O(1) < 快排O(logn)~O(n) ...

  3. java 堆排,优先级队列,归并排序

    堆排 堆排是基于二叉树而得来的 例如:对一个数组 可以转为二叉树:       二叉树特性父节点为 i ,  左叶子节点为2i+1:右叶子节点为2i+2; 步骤分解: 1. 先从第一个非叶子节点(即下 ...

  4. 2020-03-25:快排、堆排和归并都是O(nlog n)的算法,为何JDK选择快速排序?

    福哥答案2020-03-26: 口诀如下:冒选插希快 堆归计桶基(冒泡,选择,插入,希尔,快速,堆,归并,计数,桶,基数)冒线 平平 稳常小选平 平平 不常小插线 平平 稳常序希线 四组 不常组快四 ...

  5. P1177 【模板】快速排序(学完归并和堆排之后的二更)

    P1177 [模板]快速排序 不用说,连题目上都标了是一道模板,那今天就来对能用到的许多排序方式进行一个总结: 选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理 ...

  6. 数组第K小数问题 及其对于 快排和堆排 的相关优化比较

    题目描述 给定一个整数数组a[0,...,n-1],求数组中第k小数 输入描述 首先输入数组长度n和k,其中1<=n<=5000, 1<=k<=n 然后输出n个整形元素,每个数 ...

  7. 【Algorithm】堆排,C++实现

    对一个数组中的元素按照顺序构建二叉树,就形成了一个(二叉)堆.(二叉树是虚拟的,并不是真的建立二叉树) 表示堆的数组A有两个重要属性:A.heapSize,表示堆里面有多少元素,数组里有多少元素在堆里 ...

  8. 造轮子-Java泛型堆排

    个人博客地址:http://kyle.org.cn/2018/03/13/heapsort/ Java实现泛型堆排算法,用于N个对象中选择最大或者最小的前M个,其中M<=N 类似于Mysql中o ...

  9. STL_算法_Heap算法(堆排)(精)

    C++ Primer 学习中. . . 简单记录下我的学习过程 (代码为主) /***************************************** STL-算法--Heap算法 堆排序 ...

随机推荐

  1. Outlook读取奇妙清单Wunderlist日历失败的解决办法

    错误: Outlook.com日历订阅奇妙清单的日历链接时报错 This calendar wasn't updated because of a problem with the publisher ...

  2. python工具之myql数据库操作

    import pymysql import config ''' 1.0 简单封装 1.1 添加了insert_id属性,返回insert时返回的主键 1.2 添加了column属性,返回查询的col ...

  3. 模板方法模式及php实现

    模板方法模式: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 角色: 抽象模板角色:抽象模板类, ...

  4. oss图片上传失败

    在生产上跑的正常代码,新搭了个测试环境,发现oss上传失败! 开始分析oss是否有以各种类似于白名单的功能,不认识测试域名导致的...结果不是! 改变访问类型 因为oss节点Endpoint是在杭州, ...

  5. 打开centos直接进入文本模式命令行

    2.打开/etc/inittab 文件 #vim /etc/inittab3.在默认的 run level 设置中,可以看到第一行书写如:id:5:initdefault:(默认的 run level ...

  6. jquery命名冲突

    nodeName是jquery的关键字

  7. docker-compose nginx

    docker-compose nginx example source code docker-compose nginx balancing

  8. 时间函数datetime time

    time模块 time翻译过来就是时间,有我们其实在之前编程的时候有用到过. #常用方法 1.time.sleep(secs) (线程)推迟指定的时间运行.单位为秒. 2.time.time() 获取 ...

  9. jquery 拖动(Draggable) 约束运动,输出数组排序Array

    <!doctype html><html lang="en"><head> <meta charset="utf-8" ...

  10. 秋招复习-C++(三)

    • 数据库 1.数据库的索引有哪些? (1)B树索引:利用B树作为底层数据结构的索引,在B树索引中保存索引列的值和数据表的对应行的ID,每一个叶子结点都存放着一个索引列的值和数据表对应行的ID,通过这 ...