算法——排序——归并排序
2016-04-12 18:02
351 查看
</pre>描述:<p></p><p><span style="white-space:pre"></span>1.先将它分成两半,分别排序,然后将结果归并</p><p><span style="white-space:pre"></span>2.O(nlogn)(最好与最坏都一样)</p><p><span style="white-space:pre"></span>3.稳定的排序</p><p>Code:</p><p>自顶向下(体现分治法的思想)</p><p></p><pre code_snippet_id="1643953" snippet_file_name="blog_20160412_2_2719246" name="code" class="python">class Sort: arrTemp = None @classmethod def sort(cls,arr): arrTemp = [0 for i in range(0, len(arr))] cls.sortMerge(arr, 0, len(arr) - 1) @classmethod def sortMerge(cls, arr, lo, hi): if hi <= lo : return mid = lo + (hi - lo)/2 cls.sortMerge(arr, lo, mid) cls.sortMerge(arr, mid + 1, hi) cls.merge(arr, lo, mid, hi) @classmethod def merge(cls, arr, lo, mid, hi): i = lo j = mid + 1 arrTemp = arr[:] k = lo while k <= hi: if arrTemp[j] < arrTemp[i]: arr[k] = arrTemp[j] j += 1 k += 1 else: arr[k] = arrTemp[i] i += 1 k += 1 while i > mid and k <= hi: arr[k] = arrTemp[j] k += 1 j += 1 while j > hi and k <= hi: arr[k] = arrTemp[i] i += 1 k += 1
自底向上(适合于链表)
class Sort: arrTemp = None @classmethod def sort(cls, arr): n = len(arr) arrTemp = [0 for i in range(0, n)] size = 1 while size < n: lo = 0 while lo < n - size: cls.merge(arr, lo, lo+size - 1, min(lo+size+size-1, n - 1)) lo += size + size size = size + size return @classmethod def merge(cls, arr, lo, mid, hi): i = lo j = mid + 1 arrTemp = arr[:] k = lo while k <= hi: if arrTemp[j] < arrTemp[i]: arr[k] = arrTemp[j] j += 1 k += 1 else: arr[k] = arrTemp[i] i += 1 k += 1 while i > mid and k <= hi: arr[k] = arrTemp[j] k += 1 j += 1 while j > hi and k <= hi: arr[k] = arrTemp[i] i += 1 k += 1
相关文章推荐
- CSS设置字间距
- 行高不设单位的好处 line-height:1.8
- [Java] File类的常用操作
- 华为oj 找零钱
- 线程间协作:wait,notify,notifyAll,join,yield
- hadoop初级到资深
- android 实时PCM数据编码成AAC
- 【gunzip】 解压文件命令
- hdu2073递推题
- 进度条05
- poj Binomial Coefficients (Lucas定理)
- [Android]Adapter相关onItemClick监听器四个arg参数
- Android:Timer和TimerTask详解
- TCP/IP(七)广播和多播,IGMP协议
- HUE配置zookeeper,HDFS报错Failed to access filesystem root解决
- 自定义listView 的下拉刷新上拉加载
- runOnUiThread-----startAnimation
- MySQL分库分表-操作类(php)
- 老鸟的Python入门教程
- 彻底学会使用epoll(四)——ET的写操作实例分析