- 浏览: 247130 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (127)
- vim (3)
- python (44)
- pymysql (1)
- mysql (9)
- macvim (1)
- erlang (3)
- twisted (0)
- tornado (5)
- django (7)
- postgresql (5)
- sql (1)
- java (7)
- tech (4)
- cache (1)
- lifestyle (3)
- html (1)
- ubuntu (2)
- rabbitmq (1)
- algorithm (8)
- Linux (4)
- Pythonista (1)
- thread (1)
- sort (6)
- 设计模式 (1)
- search (1)
- Unix (6)
- Socket (3)
- C (2)
- web (1)
- gc (1)
- php (10)
- macos (1)
最新评论
-
2057:
这个程序有bug。
查找算法学习之二分查找(Python版本)——BinarySearch -
dotjar:
NB
一个Python程序员的进化[转]
归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
归并操作归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。
[编辑]算法描述归并操作的过程如下:
1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置
3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
4. 重复步骤3直到某一指针达到序列尾
5. 将另一序列剩下的所有元素直接复制到合并序列尾
归并排序具体工作原理如下(假设序列共有n个元素):
1. 将序列每相邻两个数字进行归并操作,形成个序列,排序后每个序列包含两个元素
2. 将上述序列再次归并,形成个序列,每个序列包含四个元素
3. 重复步骤2,直到所有元素排序完毕
代码:
示例一
示例二
参考资料:
http://zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F
最差时间复杂度:O(nlogn) |
最优时间复杂度:O(n) |
平均时间复杂度:O(nlogn) |
归并操作归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。
[编辑]算法描述归并操作的过程如下:
1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置
3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
4. 重复步骤3直到某一指针达到序列尾
5. 将另一序列剩下的所有元素直接复制到合并序列尾
归并排序具体工作原理如下(假设序列共有n个元素):
1. 将序列每相邻两个数字进行归并操作,形成个序列,排序后每个序列包含两个元素
2. 将上述序列再次归并,形成个序列,每个序列包含四个元素
3. 重复步骤2,直到所有元素排序完毕
代码:
示例一
#!/usr/bin/env python #-*-encoding:utf-8-*- def merge_sort(lst): if(len(lst) <= 1): return lst left = merge_sort(lst[:len(lst)/2]) right = merge_sort(lst[len(lst)/2:len(lst)]) result = [] while len(left) > 0 and len(right)> 0: if( left[0] > right[0]): result.append(right.pop(0)) else: result.append(left.pop(0)) if(len(left)>0): result.extend(merge_sort(left)) else: result.extend(merge_sort(right)) return result def main(): L = [22,11,55,33,66] print merge_sort(L) if __name__=="__main__": main()
示例二
#!/usr/bin/env python #-*-encoding:utf-8-*- def merge_sort(List): mid=int(len(List)/2) if len(List)<=1:return List return merge(merge_sort(List[:mid]),merge_sort(List[mid:])) def merge(l1,l2): final=[] l1 = sorted(l1) l2 = sorted(l2) while l1 and l2: if l1[0]<=l2[0]: final.append(l1.pop(0)) else: final.append(l2.pop(0)) return final+l1+l2 def main(): L = [22,11,55,33,66] print merge_sort(L) if __name__=="__main__": main()
参考资料:
http://zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F
发表评论
-
macos 10.9.2 clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command
2014-03-25 19:13 1759方法总是有的,当然需要你去寻找。 当然如果花费太多的时间在一件 ... -
PostgreSQL psycopg2:IndexError: tuple index out of range
2014-01-09 17:04 2230Postgresql psycopg2使用like查询的时候 ... -
Python 迭代器和生成器
2013-10-15 23:09 2849迭代器 迭代器只不过是一个实现迭代器协议的容器对象。它基于两个 ... -
Python时间模块
2013-10-15 23:03 3469time模块 时间模块中最常用的一个函数就是获取当前时间的函数 ... -
Python装饰器
2013-10-15 22:59 1568编写自定义装饰器有许多方法,但最简单和最容易理解的方法是编写一 ... -
python list
2013-10-15 22:56 1254简单总结以及整理如下: >>> dir( ... -
Python Excel
2013-09-10 17:21 975安装lib easy_install xlrd def ... -
排序算法学习(python版本)之堆排序(HeapSort)
2013-07-01 22:54 1996Contains: 堆排序以及堆排序的应用 堆排序(Heaps ... -
python range xrange
2013-06-25 23:30 1149引用Help on built-in function ran ... -
python class
2013-06-25 00:54 1829引用类是创建新对象类 ... -
AttributeError: 'module' object has no attribute 'SendCloud'
2013-06-05 11:46 7083网上查了下 意思是说你命名的文件名不能和lib重名,这样会导 ... -
python string
2013-05-07 23:44 2198如果这就是字符串,这本来就是字符串 首先看下字符串的方法 ... -
Python property
2013-03-29 19:56 0由于之前有总结过,可以参考http://2057.iteye. ... -
python tips
2013-03-28 23:57 8831、enum #!/usr/bin/env python ... -
python decorators
2013-03-28 23:36 1365Contains: 1、decorators 2、funct ... -
python closures
2013-03-28 22:09 1190Closure:如果在一个内部函数里,对在外部作用域(但不是在 ... -
Python map、filter,reduce介绍
2013-03-28 22:02 13091、filter(function,iterable) 引用C ... -
Python __new__ 、__init__、 __call__
2013-03-26 23:49 5351Contains: __new__: 创建对象时调用,返回当 ... -
Python socket简介
2013-03-25 23:42 2168自豪地使用dir和help. Python 2.7.2 ( ... -
Tornado ioloop源码简析
2013-03-21 00:18 2849#!/usr/bin/env python #-*-en ...
相关推荐
归并排序是一种经典的排序算法,基于“分治”策略。它的基本思想是将大问题分解成小问题来解决,然后再将解决的小问题合并成大问题的解。在归并排序中,我们将一个大数组分成两个小数组,分别对这两个小数组进行排序...
在提供的`Src`文件中,可能包含了使用特定编程语言(如Python、Java、C++等)实现的归并排序代码,新手可以通过阅读和理解这些代码来学习归并排序的工作原理和实现细节。 归并排序的时间复杂度是O(n log n),空间...
在计算机科学领域中,排序算法是基础且重要的组成部分之一。本文将详细介绍几种经典的排序算法,并通过 Python 语言实现这些算法。Python 作为一种高级编程语言,因其简洁易读的特点而成为学习算法的理想选择。 ###...
根据提供的文件内容,本文将详细解读归并排序算法以及与之相关的编程实现。归并排序是一种有效的、稳定的排序算法,具有时间复杂度为O(nlogn)的特点。在教学少儿编程NOIP和CSP-J(计算机软件能力认证)的过程中,...
归并排序是一种经典的排序算法,基于“分治”策略,由计算机科学家John W. Backus在1945年提出。这种排序方法将一个大问题分解为小问题,然后逐个解决,最后将解决的结果合并成原问题的解。归并排序在C++中的实现...
在学习这两个文件时,你不仅可以了解到快速排序和归并排序的基本原理,还能深入理解汇编语言如何实现这些高级算法,这对于提升底层编程能力,特别是在性能敏感的应用场景中,如嵌入式系统或实时计算,都是非常有价值...
`usort`库可能会包含一些高级排序算法,如快速排序(quicksort)、归并排序(mergesort)或堆排序(heapsort)。这些算法相对于Python内置的TimSort算法,在特定场景下可能提供更快的排序速度,尤其是在处理大规模...
在Python编程语言中,归并排序(Mergesort)是一种高效的、稳定的排序算法,它采用了分治(Divide and Conquer)策略。这个算法的基本思想是将大问题分解为小问题来解决,然后合并这些小问题的解,最终得到大问题的...
5. 与其他排序算法的比较:文档中提到了快速排序与归并排序(Mergesort)以及其他多种语言的系统排序算法的比较,如Java对于对象和基本类型的不同排序实现,以及C、Unix、Visual C++、Python、Matlab、Chrome ...
1. **排序算法**:如快速排序(quicksort)、归并排序(mergesort)、插入排序(insertionsort)、选择排序(selectionsort)以及堆排序(heapsort)。它们用于对数据进行有序排列,理解每种算法的时间复杂度和适用...
- 上题的归并排序算法中,`Left, Right = mergeSort(listData[:Middle]), mergeSort(listData[Middle:])`体现了分治策略,即将问题拆分成两半分别解决。 以上是对Python五级考试中涉及的一些核心知识点的详细解析...
1. 排序算法:快速排序(quicksort.py)、归并排序(mergesort.py)、堆排序(heapsort.py)。 2. 搜索算法:二分查找(binary_search.py)、线性查找(linear_search.py)、回溯搜索(backtracking.py)。 3. 图...
- `kind`:用于指定排序算法,如'quicksort'(快速排序,默认)、'mergesort'(归并排序,稳定)或'heapsort'(堆排序)。 - `order`:用于控制排序时考虑数组的字段顺序,通常在排序结构化数组时使用。 了解了...
此外,还有快速排序(QuickSort)、归并排序(MergeSort)和插入排序(InsertionSort)等经典算法,可以通过自定义函数实现。 2. 查找算法:线性查找(Linear Search)是最基础的查找方法,但效率较低。二分查找...
1. **排序与搜索**:快速排序(quicksort)、归并排序(mergesort)、二分查找(binary search)等。 2. **递归与回溯**:用于解决复杂问题的方法,如斐波那契序列、八皇后问题等。 3. **动态规划**:解决最优化...
6. **排序和搜索算法**:快速排序(quicksort)、归并排序(mergesort)、二分查找(binary search)等是常见题目。理解它们的原理和实现方式对提高解题效率有很大帮助。 7. **动态规划**:动态规划是一种优化技术...