您的位置:首页 > 其它

算法——排序——归并排序

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: