Python最大堆排序实现方法,具体代码如下:
# -*- coding: utf-8 -*-
def merge_sort(seq, cmp=cmp, sentinel=None):
"""合并排序,伪码如下:
MERGE(A, p, q, r)
1 n1 ← q - p + 1 // 前个子序列长度
2 n2 ← r - q // 后个子序列长度
3 create arrays L[1..n1+1] and R[1..n2+1] // 创建两数组
4 for i ← 1 to n1 // 复制前n1个进L
5 do L[i] ← A[p+i-1]
6 for j ← 1 to n2 // 复制后n2个进R
7 do R[j] ← A[q+j]
8 L[n1+1] ← ∞ // 哨兵值,避免判断
9 R[n2+1] ← ∞ // sentinel value
10 i ← 1 // 重置
11 j ← 1
12 for k ← p to r // 从首个开始遍历
13 do if (L[i] <= R[j]) // 比较L与R的最小元素(<=)
14 then A[k] ← L[i] // L的小时,赋值进A
15 i ← i + 1 // L后移一位
16 else A[k] ← R[j] // R的小时,赋值进A
17 j ← j + 1 // R后移一位
T(n) = θ(n*lgn)
Args:
seq (Sequence): 一个序列对象。
cmp (Function): 比较函数。默认为内建函数cmp()。
sentinel (object): 哨兵值,比较时永远最大。
Returns:
排序后的序列。
"""
if (seq == None):
return None
if sentinel == None:
import sys
sentinel = sys.maxint
p = 0
r = len(seq) - 1
q = (r - p) / 2 + p # 奇数时,前子序列多得一项
# assert p >= 0 and r < len(seq) and p <= q <= r, 'p, q, r unavailable'
def merge(seq, p, q, r):
n1 = q - p + 1 # 前个子序列长度
n2 = r - q # 后个子序列长度
if p == q: # 即,n1 == 1 and n2 == 1。前提:在奇数时,前子序列多得一项。
# 都为1项时,直接比较设值。当然,用以下方式,直接用合并步骤也可以的。
x, y = seq[p], seq[q+1]
if cmp(x, y) <= 0:
seq[p] = x
seq[q+1] = y
else:
seq[p] = y
seq[q+1] = x
return
else:
# if n1 > 1: # 由于现在明确n1>=n2,这里可以不加这一判断。
merge(seq, p, (q - p) / 2 + p, q)
if n2 > 1:
merge(seq, q + 1, (r - q - 1) / 2 + q + 1, r)
# 合并步骤
L, R = [], []
for i in range(n1):
L.append(seq[p+i])
for j in range(n2):
R.append(seq[q+j+1])
L.append(sentinel)
R.append(sentinel)
i, j = 0, 0
for k in range(p, r+1):
x, y = L[i], R[j]
if cmp(x, y) <= 0:
seq[k] = x
i = i + 1
else:
seq[k] = y
j = j + 1
if (r - p + 1 > 1):
merge(seq, p, q, r)
return seq
if __name__ == '__main__':
import random, timeit
items = range(10000)
random.shuffle(items)
def test_sorted():
print(items)
sorted_items = sorted(items)
print(sorted_items)
def test_merge_sort():
print(items)
sorted_items = merge_sort(items)
print(sorted_items)
test_methods = [test_sorted, test_merge_sort]
for test in test_methods:
name = test.__name__ # test.func_name
t = timeit.Timer(name + '()', 'from __main__ import ' + name)
print(name + ' takes time : %f' % t.timeit(1)) 转载请注明论文发表http://www.400qikan.com
Python最大堆排序实现方法
转载于:https://www.cnblogs.com/vdtte/p/3222816.html
相关文章:

内含福利 | 世界人工智能大会:对话大咖,深挖机器学习的商业应用
机器学习作为人工智能时代的关键技术突破,已经在日常生活中广泛应用,给用户带来便利。越来越多的企业也通过机器学习,解决生产和经营中的难题。传统制造业:应用机器学习,部署系统异常检测方案,预测组件寿命…

windows7 64位操作系统上使vs2010和vs2013能够并存的处理方法
之前机子上是只安装有vs2010,后来在没有卸载vs2010的情况下想装个vs2013,使vs2010与vs2013同时并存在windows764位机上。需要依次安装cn_visual_studio_ultimate_2013_x86_dvd_3009109.iso、vs2013.2.iso和vc_mbcsmfc.exe。在安装过程中遇到的问题有: (…

Spring Cloud Alibaba 基础教程:Nacos 生产级版本 0.8.0
Spring Cloud Alibaba 基础教程:Nacos 生产级版本 0.8.0 昨晚Nacos社区发布了第一个生产级版本:0.8.0。由于该版本除了Bug修复之外,还提供了几个生产管理非常重要的特性,所以觉得还是有必要写一篇讲讲这次升级,在后续的…

awk命令使用和取出数据的最大值,最小值和平均值
得到取出数据的最大值:cat manager.txt |grep monitor|awk {print$9}|sort -rn|head -1得到取出数据的最小值:cat manager.txt|grep monitor |awk {print $9}|sort -n|head -1得到取出数据的平均值:cat manager.txt|grep monitor |awk {print…

windows7 64位机上CUDA7.0配置及在VS2010中的简单使用举例
1. 查看本机配置,查看显卡类型是否支持NVIDIA GPU,选中计算机--> 右键属性 --> 设备管理器 --> 显示适配器:NVIDIA GeForce GT 610,从https://developer.nvidia.com/cuda-gpus可以查到相应显卡的compute capabili…

用友云平台,真正的云原生架构,加速云应用落地
数字化经济的出现,企业需要通过新技术实现数字化转型,完成企业管理和业务模式变革。而云计算是数字化中尤为重要且能够更快实现的技术手段。真正的云应用必须是基于云原生架构的,PaaS是一个重要的步骤,因为这是云原生的第一接触点…

从ACM班、百度到亚马逊,深度学习大牛李沐的开挂人生
“大神”,是很多人对李沐的印象。作为一经推出便大受追捧的 MXNet 深度学习框架的主要贡献者之一,李沐功不可没。值得注意的是,这个由 DMLC(Distributed Machine Learning Community)打造的深度学习框架,创…

Linux基础介绍
Linux的创始人Linus Torvalds。Linux的官方标准发音为[linəks]。Linux和Unix是非常像的,Linux就是根据Unix演变过来的。Linux是免费的,其实只是说Linux的内核免费。在Linux内核的基础上产生了众多的Linux版本。Linux的发行版说简单点就是将Linux内核与应…

Go在区块链的发展和演进
Go语言发展至今已经过去十年多了,是目前最流行的新兴语言,云计算领域的首选语言,而且目前随着区块链的流行,Go再次成为了这个领域的第一语言,以太坊,IBM的fabric等重量级的区块链项目都是基于Go开发。 原文…

一天掌握AI核心技术,上手应用,开发者该划哪些重点?
Alpha Go 只会下棋,却并不擅长垃圾分类;智能助手已经可以执行很多任务,但距离真正的人机自然交互还很远。如今 AI 的发展面临着诸多瓶颈,基础理论研究缺失,深度学习的黑箱属性无解,把一切托付于未知并不可靠…

学会这21条,你离Vim大神就不远了
来源 | Python编程时光(ID: Python-Time)导语:作者本人是 Vim 的重度使用者,就因为喜欢上这种双手不离键盘就可以操控一切的feel,Vim 可以让人对文本的操作更加精准、高效。对于未使用过 Vim 的朋友来说,可…

C 语言 和 C++语言的对比学习 二 数据类型
不管是什么语言,我们最习惯的是通过 “hello world” ,来昭告世界,我们有了新的语言来向这个世界问好,尽管真正属于我们自己的其实是哭声。(呵呵,笑点有点低),下面我们来介绍最为基础…

Makefile语法基础介绍
在Linux下,make是一个命令工具,是一个解释Makefile中指令的命令工具。make命令执行时,需要一个Makefile文件,以告诉make命令需要怎么样去编译和链接程序。 make如何工作:在默认的方式下,只输入make命令&am…

MaxCompute studio与权限那些事儿
背景知识 MaxCompute拥有一套强大的安全体系,来保护项目空间里的数据安全。用户在使用MaxCompute时,应理解权限的一些基本概念: 权限可分解为三要素,即主体(用户账号或角色),客体(表…

GitHub标星3w+的项目,全面了解算法和数据结构知识
作者 | 程序员小吴来源 | 五分钟学算法(ID: CXYxiaowu)导语:今天分享一个开源项目,里面汇总了程序员技术面试时需要了解的算法和数据结构知识,并且还提供了相应的代码,目前 GitHub 上标星 35000 star&#…

Shell脚本基础介绍
shell基础简介:编写脚本通常使用某种基于解释器的编程语言。而shell脚本不过就是一些文件,我们能将一系列需要执行的命令写入其中,然后通过shell来执行这些脚本。进入Linux系统(Ubuntu),打开终端Terminal,”$”表示普通…

「小程序JAVA实战」小程序的举报功能开发(68)
转自:https://idig8.com/2018/09/25/xiaochengxujavashizhanxiaochengxudeweixinapicaidancaozuo66-2/ 通过点击举报按钮,跳转到举报页面完成举报操作。 后台开发 获取发布人的userId,videoId,创建者的Id controllerUserControlle…

tar常见文件解压法
2019独角兽企业重金招聘Python工程师标准>>> tar常见文件解压法:.gz - z 小写.bz2 - j 小写.xz - J 大写.Z - Z大写 转载于:https://my.oschina.net/open1900/blog/149238

cookie的作用域
当我们给网站设置cookie时,大家有没有发现在网站的其他域名下也接收到了这些cookie。这些没用的cookie看似不占多少流量,但如果对一个日PV千万的站点来说,那浪费的资源就不是一点点了。因此在设置cookie时,对它的作用域一定要设置…

必看,10篇定义计算机视觉未来的论文
译者 | Major编辑 | 赵雪出品 | AI科技大本营(ID:rgznai100)导语:如果你没能参加 CVPR 2019 , 别担心。本文列出了会上人们最为关注的 10 篇论文,覆盖了 DeepFakes(人脸转换), Facial Recogniti…

有效的rtsp流媒体测试地址汇总
以下是从网上搜集的一些有效的rtsp流媒体测试地址: 1. rtsp://218.204.223.237:554/live/1/0547424F573B085C/gsfp90ef4k0a6iap.sdp 2. rtsp://218.204.223.237:554/live/1/66251FC11353191F/e7ooqwcfbqjoo80j.sdp 3. rtsp://211.139.194.251:554…

java简单的ID生成器
2019独角兽企业重金招聘Python工程师标准>>> https://www.cnblogs.com/hongdada/p/9324473.html https://github.com/apache/incubator-shardingsphere 转载于:https://my.oschina.net/u/3005325/blog/3006311

安装、设置与启动MySql5.1.30绿色版的方法
1、解压 mysql-noinstall-5.1.30-win32.zip(下载地址http://dev.mysql.com/downloads/mysql/5.1.html)2、在 F 盘建立目录 MySql\MySqlServer5.1\ 3、把解压的内容复制到 F:\MySql\MySqlServer5.1\4、在 F:\MySql\MySqlServer5.1\ 中找 my-large.ini 把它复制成 my.ini5、在…

网页中插入VLC播放器播放rtsp视频流步骤
1. 仿照http://download.csdn.net/detail/haowenxin123456789/8044245 中步骤; 2. 从http://www.videolan.org/vlc/index.html 中下载 vlc-2.2.1-win32.exe 并安装到D:\\ProgramFiles文件夹下; 3. 运行:regsvr32 D:\\ProgramFil…

@程序员,“10倍工程师”都在追这四大AI风向
技术的发展,驱动着产业变革,从而改变着我们的生活方式。当5GAI 时代来临,核心的技术生产力就是开发者:开发者研究前沿的科学创新,推动技术发展,将技术应用于实际场景中。开发者是企业实现商业价值必不可少的…

End Credits
我不知道怎么把他删掉... 今晚WC文艺汇演wwww(等待唱歌.jpg 要是能截到屏一定发上来qwqqqqq 话说这首曲子是新发现的QAQ(Xeuphoria的还是那么好听qwqqq 今天学了快读qvq 还有...dpwww P2015 二叉苹果树 有一棵苹果树,如果树枝有分叉,一定是分2叉…

三十六亿的《哪吒》历时五年,如何用AI解决动画创作难题?
作者 | 神经小姐姐来源 | HyperAI超神经( ID: HyperAI )【导读】《哪吒之魔童降世》自 7 月 26 日上映以来,好评如潮,票房一路高歌猛进,目前已突破 36 亿。这款火爆的动画背后,是主创团队历时 5 年的细致打磨。而这漫长…

vb.net结构化异常处理和“邪用”
vb.net中的错误处理包括两种:非结构化异常处理技术和结构化异常处理。非结构化异常处理技术在vb 6.0中使用的比较普遍,即通过Err对象和ON Error、Go To、Resume等语句来实现。这种方式可以跟踪最近产生的异常和最近异常处理程序的位置。而结构化异常处理…

Ubuntu 14.04 64位机上不带CUDA支持的Caffe配置编译操作过程
Caffe是一个高效的深度学习框架。它既可以在CPU上执行也可以在GPU上执行。下面介绍在Ubuntu上不带CUDA的Caffe配置编译过程: 1. 安装BLAS:$ sudo apt-get install libatlas-base-dev 2. 安装依赖项:$ sudo apt-get install libprot…

NAT环境无法访问云端的深层次分析
这是一次我维护runningdoctor时候遇到的问题现象:1.用户无法打开web.runningdoctor.cn 2.监控状态无异常、无报警 3.tracert结果无异常、丢包率正常 4.用户无法访问的时候,我们能打开网站 5.多地代理访问网站,结果正常 6.有打开网站特别慢的时…