分治法下的简单的归并排序算法复杂度O(n)=nlogn,用三个函数:

mergesort:合并排序

splitsort:单个子集排序(子集为不多于2个元素)

splitarry:递归拆分大的需排序数组,拆分为元素不多于2个子集合,然后调用splitsort和mergesort做归并排序。

这里的数组全部都用List类型

# -*- coding: utf-8 -*-

"""

Created on Sat Apr 06 18:42:12 2013

@author: zzcwing

"""

#简单的合并排序,假设输入一个List,将list拆分为不大于2个元素的子list,分别对各子list排序

#mergesort将已经排序的子序列合并排序,复杂度O(n)

def mergesort(s1,s2):

sortedlist=[]

i=0

j=0

s=0

M=True

while M:

if i==len(s1) and j

s=j

while s

sortedlist.append(s2[s])

s=s+1

M=False

elif i

s=i

while s

sortedlist.append(s1[s])

s=s+1

M=False

elif i==len(s1) and j==len(s2):

M=False

else:

if s1[i]<=s2[j]:

sortedlist.append(s1[i])

i=i+1

else:

sortedlist.append(s2[j])

j=j+1

return sortedlist

#子list排序,O(1)

def splitsort(scell):

ts=0

if len(scell)==2:

if scell[0]>scell[1]:

ts=scell[0]

scell[0]=scell[1]

scell[1]=ts

return scell

#递归拆分,将要排序的List递归拆分为只有小于等于2个元素的list,然后依次从底层逐级合并排序,复杂度O(n)=nlogn

def splitarry(wary):

lens=len(wary)

if lens>=3:

if lens%2==0:

mid=(0+lens)/2-1

else:

mid=(0+lens-1)/2

s1=wary[0:mid+1]

s2=wary[mid+1:lens]

return mergesort(splitarry(s1),splitarry(s2))

else:

return splitsort(wary)

#测试

print splitarry([2,7,3,5,1,9,6,16,15,14,4,8,10,11,13,12])

结果如下:

用python进行归并排序,用Python做归并排序相关推荐

  1. Python培训分享:python爬虫可以用来做什么?

    爬虫又被称为网络蜘蛛,它可以抓取我们页面的一些相关数据,近几年Python技术的到来,让我们对爬虫有了一个新的认知,那就是Python爬虫,下面我们就来看看python爬虫可以用来做什么? Pytho ...

  2. python这个软件学会能做什么工作-学会Python真的有高收入?盯,请查收这份入坑指南...

    学会Python真的有高收入?盯,请查收这份入坑指南 2018-10-10 20:51:00 567点赞 6312收藏 186评论 小编注:想获得更多专属福利吗?金币加成.尊享众测.专属勋章.达人福利 ...

  3. python手机版做小游戏代码大全-Python大牛手把手教你做一个小游戏,萌新福利!...

    原标题:Python大牛手把手教你做一个小游戏,萌新福利! 引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规 ...

  4. python可以干嘛用-Python可以被用来做哪些神奇好玩的事情

    原标题:Python可以被用来做哪些神奇好玩的事情 如果你在周末.有WIFI的房间里不知道做什么,不如学下Python吧.有了它,你可以什么都不需要! 基础需求篇:温饱与空虚 躺着赚钱 一位匿名知乎网 ...

  5. python语言能干什么-python语言能做什么

    python语言可以用来做许多事,常见的一般有web开发.爬虫开发.人工智能以及游戏开发和构建桌面软件等等 Python是一个非常好用的编程语言而且开发速度快,语法简单通俗易懂,容易上手.非常适合初学 ...

  6. python编程能干什么-Python编程一般可以用来做什么

    很多朋友可能会问,为什么要学Python, 就算学会了Python 可以用来干什么呢? 一般都会首先想到爬虫.爬虫不是说的那种虫子哦, 爬虫其实就是 类似于百度蜘蛛,谷歌蜘蛛一样的. 会自动的爬取网页 ...

  7. python能在生活中做什么-Python能在生活中做什么

    很多人学习Python就是为了在人工智能.大数据等领域谋求一份高薪工作,Python其实很接地气,我们如果学习了Python而不把它作为一种谋生手段也可以在生活中解决很多问题,那么Python能在生活 ...

  8. 重庆python培训-重庆Python培训班学完能做什么

    重庆优就业ptyhon培训 倾力打造Python全栈+人工智能课程 我要报名 Python是一种面向对象的动态类型语言,起初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加 ...

  9. python有哪些作用-python能用来做什么?Python都有哪些逆天的功能

    原标题:python能用来做什么?Python都有哪些逆天的功能 随着人工智能的火爆,Python语言受到了大家广泛关注.Python是一门脚本语言,因为能将其他各种编程语言写的模块粘接在一起,又被大 ...

最新文章

  1. 使用字符串定界符(标准C ++)在C ++中解析(拆分)字符串
  2. idea下git log乱码问题
  3. Spring Boot中Spring data注解的使用
  4. 如何在Office 2007中查看关于对话框和版本信息
  5. 现在女生的床真的都是这样吗?
  6. Java 8 Friday:不再需要ORM
  7. 【Ubuntu】Ubuntu16.04安装 搜狗输入法 史上最详细
  8. Ubuntu NFS搭建过程
  9. 多媒体视频知识入门贴zt(一)
  10. mysql下载64位 csdn_Linunx-CentOS7安装mysql-5.7.23-linux-glibc2.12-x86_64.tar
  11. 韩国FSC公布新方案允许分离银行加密业务 以帮助小型交易所继续运营
  12. 进入docker容器中查看文件夹_理解 docker 容器中的 uid 和 gid
  13. Weighted Boxes Fusion加权检测框合并
  14. FreeRTOS动态创建任务
  15. 乐鑫ESP32-C3开发(一)简述和目录
  16. SSD固态硬盘怎么选?选对接口是关键
  17. Unity (一) 下载与安装
  18. vi/vim中复制粘贴命令
  19. c 语言url 编码转换,在线编码转换URL编码URL解码
  20. 店铺图片抓手,一键抓取商品详情高清图的工具

热门文章

  1. 关于module_param()宏
  2. POJ 2912 Rochambeau(难,好题,枚举+带权并查集)
  3. Python批量下载电子邮件附件并汇总合并Excel文件
  4. 批量统计多个PPTX文件中幻灯片总数量
  5. 虚拟Python环境可以这样创建
  6. 服务器怎么操作系统版本,服务器怎么操作系统版本
  7. C++ STL容器之string--常用接口
  8. 如何 方法内指令重排 进制_Java虚拟机jvm学习一:认识jvm的运行机制
  9. html悬停显示图片,JS实现悬停单元格显示图片
  10. linux C++获取当前文件所在路径的方法