Python3 notes

简介: Python3 notes

Python 归并排序

Document 对象参考手册 Python3 实例

归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

分治法:

分割:递归地把当前序列平均分割成两半。

集成:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并)。

实例

def merge(arr, l, m, r):  

   n1 = m - l + 1

   n2 = r- m  

 

   # 创建临时数组

   L = [0] * (n1)

   R = [0] * (n2)

 

   # 拷贝数据到临时数组 arrays L[] 和 R[]  

   for i in range(0 , n1):  

       L[i] = arr[l + i]  

 

   for j in range(0 , n2):  

       R[j] = arr[m + 1 + j]  

 

   # 归并临时数组到 arr[l..r]  

   i = 0     # 初始化第一个子数组的索引

   j = 0     # 初始化第二个子数组的索引

   k = l     # 初始归并子数组的索引

 

   while i < n1 and j < n2 :  

       if L[i] <= R[j]:  

           arr[k] = L[i]  

           i += 1

       else:  

           arr[k] = R[j]  

           j += 1

       k += 1

 

   # 拷贝 L[] 的保留元素

   while i < n1:  

       arr[k] = L[i]  

       i += 1

       k += 1

 

   # 拷贝 R[] 的保留元素

   while j < n2:  

       arr[k] = R[j]  

       j += 1

       k += 1

 

def mergeSort(arr,l,r):  

   if l < r:  

 

     

       m = int((l+(r-1))/2)

 

     

       mergeSort(arr, l, m)  

       mergeSort(arr, m+1, r)  

       merge(arr, l, m, r)  

 

 

arr = [12, 11, 13, 5, 6, 7]  

n = len(arr)  

print ("给定的数组")  

for i in range(n):  

   print ("%d" %arr[i]),  

 

mergeSort(arr,0,n-1)  

print ("\n\n排序后的数组")  

for i in range(n):  

   print ("%d" %arr[i]),

执行以上代码输出结果为:

给定的数组

12

11

13

5

6

7

排序后的数组

5

6

7

11

12

13

相关文章
|
测试技术 uml 数据安全/隐私保护
UML图——用例图
用例图是由参与者(Actor)、用例(Use Case)以及用它们之间的关系构成的用于描述系统静态视图的UML图(本定义摘自百度百科)。用例图能够展示系统外部的各类执行者与系统中用例的关系。
UML图——用例图
|
存储 编解码 缓存
视频平台技术成本控制的量化方法
在线视频平台为用户提供服务时,面临的一个严重的挑战是,如何保证在为用户提供流畅 且稳定播放服务的前提下,尽量降低整体运营成本。本篇文章将围绕上述问题,重点讨论技术实践中的成本控制手段。
视频平台技术成本控制的量化方法
|
网络协议 数据安全/隐私保护 网络架构
|
10月前
|
运维 监控 Cloud Native
构建深度可观测、可集成的网络智能运维平台
本文介绍了构建深度可观测、可集成的网络智能运维平台(简称NIS),旨在解决云上网络运维面临的复杂挑战。内容涵盖云网络运维的三大难题、打造云原生AIOps工具集的解决思路、可观测性对业务稳定的重要性,以及产品发布的亮点,包括流量分析NPM、网络架构巡检和自动化运维OpenAPI,助力客户实现自助运维与优化。
|
Web App开发 前端开发
浏览器鼠标点击特效
浏览器鼠标点击特效
209 0
|
算法 Unix Linux
2.5w字 + 36 张图爆肝操作系统面试题(一)
大家好,我是 cxuan,我之前汇总了一下关于操作系统的面试题,最近又重新翻阅了一下发现不是很全,现在也到了面试季了,所以我又花了一周的时间修订整理了一下这份面试题,这份面试题可以吊打市面上所有的操作系统面试题了,不是我说,是因为我系统查过,如果有不相信的大佬,欢迎狠狠的打我脸。
2.5w字 + 36 张图爆肝操作系统面试题(一)
阿里云域名购买流程图(新版教程)
阿里云域名注册购买,先注册阿里云账号,账号必须通过实名认证;然后创建信息模版,个人或企业信息模板必须通过实名认证;然后想好域名名称和域名后缀;最后在阿里云域名注册官网进行新域名的注册
7696 0
阿里云域名购买流程图(新版教程)
|
弹性计算 对象存储 CDN
阿里云账号注册流程(新手教程)
阿里云账号怎么注册?阿里云账号注册流程分为手机号注册、阿里云APP注册、支付宝和钉钉多种注册方式
2366 0
阿里云账号注册流程(新手教程)
|
消息中间件 SpringCloudAlibaba Java
SpringCloud 第一代与第二代的区别 | 学习笔记
快速学习 SpringCloud 第一代与第二代的区别
1272 0
SpringCloud 第一代与第二代的区别 | 学习笔记
|
XML JSON JavaScript
史上最全 Appium 自动化测试从基础到框架实战精华学习笔记(一)
史上最全 Appium 自动化测试从基础到框架实战精华学习笔记(一)