归并排序
- 概述
- 以归并操作为基础的排序算法,底层算法设计为分治法。
- 所谓分治法,就是讲问题分解为多个子问题递归求解,再将子问题答案合并。
- 算法实现
- 将待排序序列分解为两个,四个,,,n个子部分。
- 两两合并,并内部排序。
-
算法分析
- 这个算法描述比较简单,然而实现起来略有难度,递归迭代法均可解。
-
复杂度
排序名称 最好情况 最坏情况 平均情况 快速排序 O(nlog2n) O(nlog2n) O(nlog2n) - 稳定性
- 算法稳定。
- 优先选择
- 从空间复杂度来考虑:首选堆排序,其次是快速排序,最后是归并排序。
- 从稳定性来考虑,应选取归并排序,因为堆排序和快速排序都是不稳定的。
- 从平均情况下的排序速度考虑,应该选择快速排序。
# -*- coding:UTF-8 -*-
def MergeSort(data=[1, 2, 3, 4, 5]):
def merge(data, left, middle, right, temp):
\'\'\'
合并函数
:param data: 待合并列表
:param left:左指针
:param middle:
:param right:右指针
:param temp:
:return:None
\'\'\'
i = left
j = middle + 1
k = 0
while i <= middle and j <= right:
if data[i] <= data[j]:
temp[k] = data[i]
i += 1
else:
temp[k] = data[j]
j += 1
k += 1
while i <= middle:
temp[k] = data[i]
i += 1
k += 1
while j <= right:
temp[k] = data[j]
j += 1
k += 1
k = 0
while left <= right:
data[left] = temp[k]
left += 1
k += 1
def mergeSort(data, left, right, temp):
print(data)
if left < right:
middle = (left + right) // 2
mergeSort(data, left, middle, temp)
mergeSort(data, middle+1, right, temp)
merge(data, left, middle, right, temp)
temp = [0]*len(data)
mergeSort(data, 0, len(data)-1, temp)
print(data)
return data
if __name__ == \'__main__\':
testData = [6, 5, 4, 3, 2, 7, 1]
MergeSort(testData)
具体可以查看我的github。
继续阅读与本文标签相同的文章
上一篇 :
直击高考人机大战:技术、争议与人族胜利
下一篇 :
JavaSe学习总结_网络编程篇
-
苹果新获专利详细介绍了Measure如何利用AR进行精确视觉测量
2026-05-18栏目: 教程
-
消费升级不是把原来的成熟产品卖得更高更贵
2026-05-18栏目: 教程
-
红旗首款纯电SUV登场!动力强续航足,这外观太漂亮!
2026-05-18栏目: 教程
-
互联网时代,挑战与机遇并存
2026-05-18栏目: 教程
-
便利店如何建立高效的物流信息系统平台
2026-05-18栏目: 教程
