排序算法-07归并排序(python实现)
归并排序
- 概述
- 以归并操作为基础的排序算法,底层算法设计为分治法。
- 所谓分治法,就是讲问题分解为多个子问题递归求解,再将子问题答案合并。
- 算法实现
- 将待排序序列分解为两个,四个,,,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实现)相关推荐
- 【代码刷题】排序算法总结(python实现)
排序算法总结(Python实现) 算法介绍 算法分类 相关概念 1. 冒泡排序(Bubble Sort) 1.1 思想 1.2 python实现 1.3 复杂度 1.4 稳定性 2. 快速排序(Qui ...
- 经典排序算法总结与Python实现(下)
在之前的博客经典排序算法总结与Python实现(上)中已经讨论过插入.冒泡.选择.快排.谢尔排序.这篇博客主要完成剩下的几个排序算法. 排序算法 时间复杂度(最好) 时间复杂度(最差) 时间复杂度(平 ...
- 排序算法:归并排序、快速排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.归并排序: 1.工作原理: 归 ...
- 排序算法之--归并排序(好玩的一个算法o。o)快速入门
排序算法之--归并排序(好玩的一个算法o.o) 下面是归并操作的基本思路(注意:是归并操作哦,不是归并排序哦) 归并操作的工作原理如下: 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存 ...
- NOI提高级:排序算法之归并排序、快速排序
图解排序算法(四)之归并排序 图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园 小学生图解排序算法:⑥归并排序 小学生图解排序算法:⑥归并排序_纯文笔记-CSDN博客_图解 ...
- 经典排序算法总结与Python实现(上)
本篇博客中的有序都是指的升序,降序情况稍微改改就出来了. 排序算法 时间复杂度(最好) 时间复杂度(最差) 时间复杂度(平均) 空间复杂度 稳定性 插入排序 O(n)O(n)O(n) O(n2)O(n ...
- 数据结构与算法:十大排序算法之归并排序
数据结构与算法:十大排序算法之归并排序 package TopTenSortingAlgorithms;/*** 归并排序:Java** @author skywang* @date 2014/03/ ...
- [Alg]排序算法之归并排序
[Alg]排序算法之归并排序 作者:屎壳郎 miaosg01@163.com 日期:Aug 2021 版次:初版 简介: 归并排序是一类在任何情况下都能保证Nlg(N)N\lg(N)Nlg(N)的排 ...
- 【排序算法】归并排序(C语言)
[排序算法]-- 归并排序(C语言) 目录 一.归并排序的原理 二.两个有序数组排序和合并 1. 原地排序 2. 创建临时空间 二.递归实现 三.非递归实现 1. 实现思路 2. 数组边界问题 3. ...
最新文章
- 数据结构和算法解:第九章 算法设计技巧
- python multiprocessing — 基于进程的并行
- phpwind html5,PHPWIND 5.3 运行代码 功能实现代码
- BugKuCTF WEB 管理员系统
- curl php 模拟来源_PHP-Curl模拟HTTPS请求
- Weex 解决Print: Entry, :CFBundleIdentifier, Does Not Exist 错误方法
- jQuery学习笔记02:核心部分
- vscode+leetcode环境配置
- 微软8月补丁星期二值得关注的几个0day、几个严重漏洞及其它
- Reader entry: ���� 乱码
- 图像通道变换python-opencv
- 设计模式(1)-- 七大软件设计原则-开闭原则
- 安卓和php开发融云聊天室,聊天室
- EEGLAB初步学习(1)
- 十六进制和二进制相互转换(快速转换)
- 【NLP】keras实现IMDB电影评论分类
- [RK3128][Android 6.0] 3G模块调试
- gnome黑屏 ubuntu_记Ubuntu开机黑屏及解决过程
- 神经网络芯片概念股,图神经网络预测股票
- nginx代理ajax跨域请求