python实现排序算法二:归并排序
2024-09-01 11:13:57
##归并排序
##基本思想:对于两个排好序的数组A和B,逐一比较A和B的元素,将较小值放入数组C中,当A或者B数组元素查询完后,将A或者B剩余的元素直接添加到C数组中,此时C数组即为有序数组,这就是归并排序原理
##step1:对于一个无序数组A,可以取A元素中间索引,将A数组分为两个部分A1,A2;
##step2:递归A1,A2,分别将A1,A2分为A11,A12和A21,A22两部分直至只有一个元素;
##step3:对于只有一个元素的数组来讲,其是有序的,因此,对于两个只有一个元素的数组,可以根据基本思想所述合成一个数组C,最后得到有序数组
代码如下:
##归并排序
def merge(left, right):
l = 0
r = 0
result = []
while l < len(left) and r < len(right):
if left[l] < right[r]:
result.append(left[l])
l += 1
else:
result.append(right[r])
r += 1
result += left[l:]
result += right[r:]
return result def mergesort(array):
if len(array) <= 1:
return array
num = int(len(array)/2)
left = mergesort(array[:num])
right = mergesort(array[num:])
return merge(left, right) if __name__ == '__main__':
b = [1, 22, 90, 4, 65, 3, 73, 8]
print(b)
a = mergesort(b)
print(a)
最新文章
- 魅族M8时期写过几个app,纪念一下曾经的自己
- [Asp.net 开发系列之SignalR篇]专题四:使用SignalR实现发送图片
- Java 毫秒转换为日期类型、日期转换为毫秒
- ACM Longest Repeated Sequence
- android 学习随笔六(网络要求及配置)
- (easy)LeetCode 223.Rectangle Area
- [Everyday Mathematics]20150302
- 第一章 响应式设计之Media Quer
- Javascript之基本包装类型
- ssh+c3p0调用存储过程、组拼STRUCT时仅使用一个connection的方法 c3p0代理类转原始类(connection)
- table转list
- 常用SQL的优化
- Home · chineking/cola Wiki
- get和post方式请求数据,jsonp
- Java进阶(八)Java加密技术之对称加密 非对称加密 不可逆加密算法
- new-delete-malloc-free关系总结
- WebApi 后台获取token值
- Fatal error: ENOSPC: System limit for number of file watchers reached
- 获取sql 时间时分秒
- JSONObject的toBean 和 fromObject
热门文章
- UE4 Socket多线程非阻塞通信
- 5 Steps to Getting Started with SharePoint Development
- Spqrk笔记
- Java - 25 Java 包(package)
- mybatis基于注解形式的多数据源
- java的Map遍历
- 正则表达式-使用说明Regular Expression How To (Perl, Python, etc)
- CopyOnWriteList-JDK1.8
- MYSQL 优化常用方法(转载)
- <;转载>;AWS 基础知识