Python 归并排序法

归并排序法:是采用分治法的一个非常典型的应用。

分治法:

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

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

Python 归并排序法

#归并排序法

#1、合并的过程函数

left 开始索引下标;m数组中间值下标;right结束索引下标

def merge(arr,left,m,right):
n1=m-left+1 #前子数组的长度
n2=right-m #后子数组的长度

创建临时数组

L=[0]n1
R=[0]
n2

拷贝数据到临时数组

for i in range(0,n1): #把前子数组的元素拷贝到左边的临时数组
L[i]=arr[left+i]

for j in range(0,n2): #把后子数组的元素拷贝到右边的临时数组
R[j]=arr[m+1+j]

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

把左右临时数组的元素,按大小合并到原数组中

i=0 #初始化第一个子数组的索引
j=0 #初始化第二个子数组的索引
k=left #初始归并子数组的索引

while i < n1 and j

k +=1

拷贝 L[] 剩下的保留元素

如果右边的数字元素都并入完了,左边数组还有元素,则不需要再进行比较,集中并入

while i

拷贝 R[]剩下 的保留元素

如果左边的数字元素都并入完了,右边数组还有元素,则不需要再进行比较,集中并入

while j

#2、分 的过程

先分:一直分到单个元素后,从单个元素再合并的操作

def mergeSort(arr,left,right):

if left >= right:
return

m=int((left+right)/2)

mergeSort(arr,left,m) #递归对数列的前半部分进行分开
mergeSort(arr,m+1,right) #递归对数列的后半部分进行分开
merge(arr,left,m,right) #从分开后的单个元素开始进行合并

测试

arr=[8,4,7,5,3,1,6,2]
n=len(arr)

mergeSort(arr,0,n-1)
print(“排序后的数值”)
for i in range(n):
print(“%d” %arr[i])

Original: https://www.cnblogs.com/xiangers/p/15458333.html
Author: xiangers
Title: Python 归并排序法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/510998/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 继GitHub的Copilot收费后,亚马逊推出了 CodeWhisperer,感觉不错哟!

    Copilot 是 Github 推出的一款人工智能编程助手,推出仅一年就受到大量开发者的追捧(据官方统计有 120 万用户)。然而,自 2022 年 6 月起,它改为了付费订阅模…

    Python 2023年6月9日
    0135
  • Python爬虫案例:采集青创网批发商品数据(附代码)

    开发环境 Python 3.8 Pycharm 2021.2 模块使用 selenium >>> pip install selenium==3.141.0 (指…

    Python 2023年11月9日
    043
  • 数据分析——Pandas(进阶)

    编辑器:jupyter notebook 一、数据统计 import numpy as np import pandas as pd 1. 创建DataFrame对象 生成100行…

    Python 2023年8月9日
    052
  • 关于python代码目录结构

    第一次尝试系统设计,从目录结构开始慢慢来 目前项目的目录结构 简要说明 因为项目是要分两块部署在不同的服务器上的task_producer是作为任务发布者部署task_custom…

    Python 2023年11月2日
    035
  • Dart语言简介

    简单介绍Dart语言 Dart是一种针对客户优化的语言,亦可在任何平台上快速开发的应用陈旭。目标是为多平台开发提供最高效的变成语言,并为应用程序框架搭配了领会的运行时执行平台。 D…

    Python 2023年10月13日
    032
  • pytest 框架下的接口自动化

    @pytest.mark.parametrize(args_name,args_value)args_name:参数名args_value:参数值,支持{},[],(),{} im…

    Python 2023年9月13日
    042
  • pandas高级操作

    pandas高级操作 1.替换操作 2.映射操作 * 2.1 map 2.2.apply 和 applymap 3.排序实现的随机抽样 4.数据的分类处理 5.高级数据聚合 6.透…

    Python 2023年8月17日
    032
  • python数据分析学习day08:柱状图

    柱状图: 柱状图是一种用矩形柱来表示数据分类的图表。 柱状图可以垂直绘制,也可以水平绘制。 它的高度与其所表示的数值成正比关系。 柱状图显示了不同类别之间的比较关系,图表的水平轴 …

    Python 2023年8月30日
    063
  • mongodb

    一、安装 官网没办法下载,点击链接没反应,按了F12,好歹链接能点了,下载下来的直接是个安装包,也不是可安装文件。运行monogd也失败了。 一通搜,搜到这个链接里可以下载msi可…

    Python 2023年10月6日
    036
  • Python数据分析-pandas基础-2-DataFrame基础操作

    1.基础索引方式 import pandas as pd df=pd.DataFrame({‘col1′:[1,2,3,4,5],’col2’:[6,7,8,9,0]}) df &…

    Python 2023年8月19日
    032
  • 猿创征文 | 国产数据库TiDB架构特性

    前言 TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Ana…

    Python 2023年8月26日
    056
  • linux安装达梦数据库8

    PS.本次测试只是为了项目需要,但是在部署和启动程序的时候发生了一系列的报错,由此记录下来为日后作参考 安装达梦数据库 1. 达梦数据库(DM8)简介 达梦数据库管理系统是武汉达梦…

    Python 2023年10月18日
    032
  • python 模块、原始字符串

    三种方法: 隐藏成员: 模块中以下划线_开头的属性 隐藏成员不会被from 模块 import * 导入 导入模块时会将模块的代码全部执行 as 取别名 from module01…

    Python 2023年11月1日
    033
  • python数据精度问题

    🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡 进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯…

    Python 2023年8月9日
    051
  • 热力图矩阵数字及注释参数大小调整

    1.热力图矩阵块颜色参数: vmax,vmin:分别是热力图的颜色取值最大和最小范围,默认是根据data数据表里的取值确定cmap:从数字到色彩空间的映射,取值是matplotli…

    Python 2023年9月3日
    057
  • AI常用框架和工具丨3. 可视化库Matplotlib

    可视化库Matplotlib,AI常用框架和工具之一。理论知识结合代码实例,希望对您有所帮助。 文章目录 * – 环境说明 – 一、Matplotlib简介…

    Python 2023年9月1日
    056
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球