归并排序

  • 概述

    • 以归并操作为基础的排序算法,底层算法设计为分治法。
    • 所谓分治法,就是讲问题分解为多个子问题递归求解,再将子问题答案合并。
  • 算法实现
    • 将待排序序列分解为两个,四个,,,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 = leftj = middle + 1k = 0while i <= middle and j <= right:if data[i] <= data[j]:temp[k] = data[i]i += 1else:temp[k] = data[j]j += 1k += 1while i <= middle:temp[k] = data[i]i += 1k += 1while j <= right:temp[k] = data[j]j += 1k += 1k = 0while left <= right:data[left] = temp[k]left += 1k += 1def mergeSort(data, left, right, temp):print(data)if left < right:middle = (left + right) // 2mergeSort(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 dataif __name__ == '__main__':testData = [6, 5, 4, 3, 2, 7, 1]MergeSort(testData)

具体可以查看我的github。

排序算法-07归并排序(python实现)相关推荐

  1. 【代码刷题】排序算法总结(python实现)

    排序算法总结(Python实现) 算法介绍 算法分类 相关概念 1. 冒泡排序(Bubble Sort) 1.1 思想 1.2 python实现 1.3 复杂度 1.4 稳定性 2. 快速排序(Qui ...

  2. 经典排序算法总结与Python实现(下)

    在之前的博客经典排序算法总结与Python实现(上)中已经讨论过插入.冒泡.选择.快排.谢尔排序.这篇博客主要完成剩下的几个排序算法. 排序算法 时间复杂度(最好) 时间复杂度(最差) 时间复杂度(平 ...

  3. 排序算法:归并排序、快速排序

    相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.归并排序: 1.工作原理: 归 ...

  4. 排序算法之--归并排序(好玩的一个算法o。o)快速入门

    排序算法之--归并排序(好玩的一个算法o.o) 下面是归并操作的基本思路(注意:是归并操作哦,不是归并排序哦) 归并操作的工作原理如下: 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存 ...

  5. NOI提高级:排序算法之归并排序、快速排序

    图解排序算法(四)之归并排序 图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园 小学生图解排序算法:⑥归并排序 小学生图解排序算法:⑥归并排序_纯文笔记-CSDN博客_图解 ...

  6. 经典排序算法总结与Python实现(上)

    本篇博客中的有序都是指的升序,降序情况稍微改改就出来了. 排序算法 时间复杂度(最好) 时间复杂度(最差) 时间复杂度(平均) 空间复杂度 稳定性 插入排序 O(n)O(n)O(n) O(n2)O(n ...

  7. 数据结构与算法:十大排序算法之归并排序

    数据结构与算法:十大排序算法之归并排序 package TopTenSortingAlgorithms;/*** 归并排序:Java** @author skywang* @date 2014/03/ ...

  8. [Alg]排序算法之归并排序

    [Alg]排序算法之归并排序 作者:屎壳郎 miaosg01@163.com 日期:Aug 2021 版次:初版 简介: 归并排序是一类在任何情况下都能保证Nlg⁡(N)N\lg(N)Nlg(N)的排 ...

  9. 【排序算法】归并排序(C语言)

    [排序算法]-- 归并排序(C语言) 目录 一.归并排序的原理 二.两个有序数组排序和合并 1. 原地排序 2. 创建临时空间 二.递归实现 三.非递归实现 1. 实现思路 2. 数组边界问题 3. ...

最新文章

  1. 数据结构和算法解:第九章 算法设计技巧
  2. python multiprocessing — 基于进程的并行
  3. phpwind html5,PHPWIND 5.3 运行代码 功能实现代码
  4. BugKuCTF WEB 管理员系统
  5. curl php 模拟来源_PHP-Curl模拟HTTPS请求
  6. Weex 解决Print: Entry, :CFBundleIdentifier, Does Not Exist 错误方法
  7. jQuery学习笔记02:核心部分
  8. vscode+leetcode环境配置
  9. 微软8月补丁星期二值得关注的几个0day、几个严重漏洞及其它
  10. Reader entry: ���� 乱码
  11. 图像通道变换python-opencv
  12. 设计模式(1)-- 七大软件设计原则-开闭原则
  13. 安卓和php开发融云聊天室,聊天室
  14. EEGLAB初步学习(1)
  15. 十六进制和二进制相互转换(快速转换)
  16. 【NLP】keras实现IMDB电影评论分类
  17. [RK3128][Android 6.0] 3G模块调试
  18. gnome黑屏 ubuntu_记Ubuntu开机黑屏及解决过程
  19. 神经网络芯片概念股,图神经网络预测股票
  20. nginx代理ajax跨域请求

热门文章

  1. RPC实现Consumer 远程调用
  2. MyBatis 源码解读-typeAliasesElement()
  3. 简单分析ComponentScan
  4. 在配置类上写@CompentScan注解来进行包扫描
  5. RocketMQ的Consumer详解之重复消息的解决方案
  6. DataURL:概述
  7. 互联网API开放平台安全设计-基于OAuth2.0协议方式
  8. Spring Session官方介绍及spring框架学习方法
  9. Activemq实战
  10. Spring cloud集成Rabbitmq