当前位置: 首页 > news >正文

1.2.1 归并排序

归并排序原理

1) 整体就是一个简单递归, 左边排好序、 右边排好序、 让其整体有序
2) 让其整体有序的过程里用了外排序方法
3) 利用master公式来求解时间复杂度
4) 归并排序的实质
时间复杂度O(N*logN),额外空间为O(N).

code1

from test1 import  *def merge(arr, l, mid, r):  # arrhelp = [0] * (r - l + 1)i = 0p1 = lp2 = mid + 1while p1 <= mid and p2 <= r:if arr[p1] <= arr[p2]:  # 左侧小于等于右侧,拷贝左侧; ==时,默认拷贝右边help[i] = arr[p1]i += 1p1 += 1else:help[i] = arr[p2]i += 1p2 += 1while p1 <= mid:     # 只剩下左侧, 把左侧拷贝到help数组help[i] = arr[p1]i += 1p1 += 1while p2 <= r:    # 只剩下右侧侧, 把右侧拷贝到help数组help[i] = arr[p2]  i += 1p2 += 1# help copy to arrfor i in range(r-l+1):arr[l+i] = help[i]returndef mergeSort1(arr, l, r):if l == r:returnmid = l + ((r - l) >> 1)mergeSort1(arr, l, mid)mergeSort1(arr, mid + 1, r)merge(arr, l, mid, r)returndef mergeSort(arr):if arr == None or len(arr) < 2:returnmergeSort1(arr, 0, len(arr) - 1)

test

# for test
def main():testTime =  500000              # 500000maxSize = 100maxValue = 100succeed = Truefor i in range(testTime):arr1 = generateRandomArray(maxSize, maxValue)arr2 = copyArray(arr1)mergeSort(arr1)             # ------------------test------comparator(arr2)if (not isEqual(arr1, arr2)):succeed = FalseprintArray(arr1)printArray(arr2)breakif succeed:print("Nice!")else:print("Fucking fucked!")arr = generateRandomArray(maxSize, maxValue)printArray(arr)mergeSort(arr)printArray(arr)if __name__ == '__main__':main()

时间复杂度

1. T(N) = 2 T(N / 2) + O(N)根据master公式, 时间复杂度 O(NlongN)选择、冒泡、插入排序的比较行为没有保留下来。
归并排序的比较行为被保留下来,变成了整体有序的部分。因而时间复杂为O(NlogN)

http://www.mrgr.cn/news/82629.html

相关文章:

  • [转]Java面试近一个月的面试总结
  • DeepSeek与llama本地部署(含WebUI)
  • OpenAI 实战进阶教程 - 第六节: OpenAI 与爬虫集成实现任务自动化
  • Day38-【13003】短文,树的基本概念,用广义表表示树
  • arm 下 多线程访问同一变量 ,使用原子操作 性能差问题
  • VScode+Latex (Recipe terminated with fatal error: spawn xelatex ENOENT)
  • 智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之13 方案再探之4:特定于领域的模板 之 div模型(完整版)
  • 三子棋游戏
  • web漏洞之文件包含漏洞
  • 模型训练二三事:参数个数、小批量、学习率衰减、输入形状
  • SCAU期末笔记 - 数据库系统概念往年试卷解析
  • MyBatis执行一条sql语句的流程(源码解析)
  • 域上的多项式环,整除,相通,互质
  • 【精读电影】至暗时刻
  • unity-入门查漏补缺0.2.02.07
  • RocketMQ场景使用
  • window11 wsl mysql8 错误分析:1698 - Access denied for user ‘root‘@‘kong.mshome.net‘
  • RocketMQ使用场景问题
  • Eplan 项目结构(高层代号、安装地点、位置代号)
  • MySQL Binlog 监听方案
  • 智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之20 再次重建 之5 项目文件三大部 整“拼”项目文档总述
  • 保姆级教程Docker部署ClickHouse镜像
  • 2025/1/1 路由期末复习作业二
  • Golang 入门基础知识
  • 【前序、中序、后序遍历递归栈的实现】
  • 计算机组成原理期末复习