python二路归并排序实现法
2015-08-16 14:39
711 查看
归并原理:
第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置
第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针超出序列尾
将另一序列剩下的所有元素直接复制到合并序列尾
归并过程:
比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1;否则将第二个有序表中的元素a[j]复制到r[k]中,并令j和k分别加上1,如此循环下去,直到其中一个有序表取完,然后再将另一个有序表中剩余的元素复制到r中从下标k到下标t的单元。归并排序的算法我们通常用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。
python代码:
第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置
第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针超出序列尾
将另一序列剩下的所有元素直接复制到合并序列尾
归并过程:
比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1;否则将第二个有序表中的元素a[j]复制到r[k]中,并令j和k分别加上1,如此循环下去,直到其中一个有序表取完,然后再将另一个有序表中剩余的元素复制到r中从下标k到下标t的单元。归并排序的算法我们通常用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。
python代码:
def MergeSort(lists): if len(lists) <=1: return lists num = len(lists)/2 left = MergeSort(lists[:num]) right = MergeSort(lists[num:]) return Merge(left,right) def Merge(left,right): r,l=0,0 reslut=[] while l<len(left) and r<len(right): if left[l] < right[r]: reslut.append(left[l]) l+=1 else: reslut.append(right[r]) r+=1 reslut+= right[r:] reslut+= left[l:] return reslut if __name__ == '__main__': arr = [4,2,15,4,6,7,1] print MergeSort(arr)
相关文章推荐
- Python生态环境简介
- Python 之 读取txt文件
- py 格式转换为 exe 使用方法
- Python包管理工具-pip
- win 环境安装python 和 Py pip
- [python leetcode] Word Ladder II (very hard)[非常难,放弃]
- PAT 01-2. Maximum Subsequence Sum (25) - Python
- python选择排序实现法
- python2.7虚拟环境virtualenv安装及使用
- python-requests快速上手
- wxPython Cookbook (Chatper1)part 4
- python快速排序法实现
- Python初学(1)
- Python中的random模块
- PAT 01-1. 最大子列和问题(20)-Python
- 取石子游戏
- Python编程习惯
- Python3.4 Python的一些特色
- Python2.7 安装numpy报错解决方法
- 6个最佳的开源 Python 应用服务器