#归并排序
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. 【学习笔记】后端中的MVC和前端MVVM的关系

  2. currentStyle getComputedStyle兼容

    function getStyle(obj,attr){ if(obj.currentStyle) {return obj.currentStyle[attr]} else{ return getCo ...

  3. iOS 开发App捕获异常, 反馈给服务器, 提高用户体验

    在我们开发的app中, 不可避免的, 有时候用户使用软件会崩溃.  我们就需要捕获异常, 可以在入口类中加入相应的代码, 可以在每次用户打开程序的时候, 检查一下沙盒中是否有崩溃日志, 如果有, 可以 ...

  4. iOS中使用 Reachability 检测网络区分手机网络类型 WiFi 和2 3 4 G

    如果你想在iOS程序中提供一仅在wifi网络下使用(Reeder),或者在没有网络状态下提供离线模式(Evernote).那么你会使用到Reachability来实现网络检测. 写本文的目的 了解Re ...

  5. PMP项目管理学习笔记(8)——整个管理之监控项目工作、综合变更控制、结束项目或阶段

    监控项目工作 输入:企业环境要素.组织过程资产.项目管理计划.绩效报告 工具:专家判断 输出:变更请求.项目管理计划更新.项目文档更新 综合变更控制 输入:企业环境要素.组织过程资产.项目管理计划.变 ...

  6. SQL Server中的事务日志管理的阶梯,级别1:事务日志概述

    SQL Server中的事务日志管理的阶梯,级别1:事务日志概述 翻译:刘琼滨 谢雪妮 许雅莉 赖慧芳 级别1:事务日志概述 事务日志是一个文件,其中SQL服务器存储了所有与日志文件关联的数据库执行的 ...

  7. 【人工智能系列】python的Quepy库的学习

    第一篇 了解 什么是Quepy quepy是一个Python框架改造自然语言问题在数据库查询语言查询.它可以很容易地定制不同类型的问题,在自然语言和数据库查询.因此,用很少的代码,你可以建立自己的系统 ...

  8. Python3 OpenCV3 图像处理基础

    开发环境搭建 本人使用的是Ubuntu 16.04LTS. 1.安装Python3 ## 其实 Ubuntu 16.04 系统自带了 Python 3.5.2,因此不需要再安装了?但是需要安装一些开发 ...

  9. TensorFlow低阶API(二)—— 张量

    简介 正如名字所示,TensorFlow这一框架定义和运行涉及张量的计算.张量是对矢量和矩阵向潜在的更高维度的泛化.TensorFlow在内部将张量表示为基本数据类型的n维数组. 在编写TensorF ...

  10. JQQ文字素材

    1.十二生肖:子鼠.丑牛.寅虎.卯兔.辰龙.巳舍.午马.未羊.申猴.酉鸡.戌狗.亥猪.丙申年(2016)乙未年(2015)甲午年(2014)癸巳年(2013)壬辰年(2012)辛卯年(2011)庚寅年 ...