博客地址:https://www.cnblogs.com/zylyehuo/

递归思路

# _*_coding:utf-8_*_

import random

def merge(li, low, mid, high):
i = low
j = mid + 1
ltmp = []
while i <= mid and j <= high: # 只要左右两边都有数
if li[i] < li[j]:
ltmp.append(li[i])
i += 1
else:
ltmp.append(li[j])
j += 1
# while执行完,肯定有一部分没数了
while i <= mid:
ltmp.append(li[i])
i += 1
while j <= high:
ltmp.append(li[j])
j += 1
li[low:high + 1] = ltmp def merge_sort(li, low, high):
if low < high: # 至少有两个元素,递归
mid = (low + high) // 2
merge_sort(li, low, mid)
merge_sort(li, mid + 1, high)
merge(li, low, mid, high) li = list(range(10)) random.shuffle(li)
print(li)
merge_sort(li, 0, len(li) - 1)
print(li)

归并排序(递归)(NB)的更多相关文章

  1. 归并排序 递归and非递归

    什么是归并排序 归并排序其实就做两件事:  “分解”——将序列每次折半划分. “合并”——将划分后的序列段两两合并后排序.   首先我们来看一下分解是怎样实现的呢?   // 递归退出条件,及left ...

  2. MIT6.006Lec03:插入排序,归并排序,递归树

    MIT6.006是算法导论课,Lec03主要讲插入排序,归并排序,以及分析方法(递归树)等. 插入排序,可以分为线性插入排序.二分插入排序,区别在于当把数组中某元素插入到前面的有序列表中时,前者遍历, ...

  3. C#版 - LeetCode 148. Sort List 解题报告(归并排序小结)

    leetcode 148. Sort List 提交网址: https://leetcode.com/problems/sort-list/  Total Accepted: 68702 Total ...

  4. 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)

    排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列. 稳定度(稳定性)一个排序算法是稳定的,就是当有两个相等记录的关 ...

  5. The Divide and Conquer Approach - 归并排序

    The divide and conquer approach - 归并排序 归并排序所应用的理论思想叫做分治法. 分治法的思想是: 将问题分解为若干个规模较小,并且类似于原问题的子问题, 然后递归( ...

  6. MergeSort(归并排序)原理及C++代码实现

    归并排序利用分治策略进行排序.原理如下 分解:分解待排的n个元素的序列成个具n/2个元素的两个子序列. 解决:使用归并排序递归地排序两个子序列. 合并:合并两个已排序的子序列以产生已排序的答案. 归并 ...

  7. 数据结构和算法(Golang实现)(23)排序算法-归并排序

    归并排序 归并排序是一种分治策略的排序算法.它是一种比较特殊的排序算法,通过递归地先使每个子序列有序,再将两个有序的序列进行合并成一个有序的序列. 归并排序首先由著名的现代计算机之父John_von_ ...

  8. 啃算法:归并排序及JavaScript实现

    在学习归并排序之前,有必要了解分治法,因为归并排序正是应用了分治模式.(基本定义摘自<算法导论>) 一.分治法 1.思想: 将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些 ...

  9. 算法学习->归并排序

    nwpu-2020级算法实验1-problemB Overview 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的 ...

  10. 算法导论 - 基础知识 - 算法基础(插入排序&归并排序)

    在<算法导论>一书中,插入排序作为一个例子是第一个出现在该书中的算法. 插入排序: 对于少量元素的排序,它是一个有效的算法. 插入排序的工作方式像许多人排序一手扑克牌.开始时,我们手中牌为 ...

随机推荐

  1. 这是我见过最通俗易懂的SVD(奇异值分解)算法介绍

    线性代数是机器学习领域的基础,其中一个最重要的概念是奇异值分解(SVD),本文尽可能简洁的介绍SVD(奇异值分解)算法的基础理解,以及它在现实世界中的应用. SVD是最广泛使用的无监督学习算法之一,它 ...

  2. Spring Security默认登录页面代码位于哪里?

    问:Spring Security默认登录页面代码位于哪里? 答:它是从此类生成的org.springframework.security.web.authentication.ui.DefaultL ...

  3. JVM实战—9.线上FGC的几种案例

    大纲 1.如何优化每秒十万QPS的社交APP的JVM性能(增加S区大小 + 优化内存碎片) 2.如何对垂直电商APP后台系统的FGC进行深度优化(定制JVM参数模版) 3.不合理设置JVM参数可能导致 ...

  4. Spring基础 01 | Ioc

    Maven项目的创建 项目所在路径 - 项目一 - 创建Module - 添加Webapp(Project Structure) - 项目二 Spring简介 分层全栈(各层解决方案)轻量级框架,以I ...

  5. Solution Set -「LOCAL」冲刺省选 Round VII

    \(\mathscr{Summary}\)   三道结论题,毁灭吧.   A 题一开始思路偏了,发现答案最高 bit 能固定之后接下来的结论就顺理成章了.   B 题哈哈哈哈又是经典:我结论猜对了,然 ...

  6. C# 窗口鼠标穿透以及取消窗口鼠标穿透

    private const int WS_EX_TRANSPARENT = 0x20; private const int GWL_EXSTYLE = -20; /// <summary> ...

  7. CountDownLatch底层原理和示例

    CountDownLatch 是一个同步工具类,允许一个线程或者多个线程等待其他线程完成操作,再执行. CountDownLatch(int count) 构造一个用给定计数初始化的 CountDow ...

  8. Transformer 原理图解

    转载:小白看得懂的 Transformer (图解) 引言 谷歌推出的BERT模型在11项NLP任务中夺得SOTA结果,引爆了整个NLP界.而BERT取得成功的一个关键因素是Transformer的强 ...

  9. Linux下mysql的二进制安装与部分练习

    鲸英训练营 0531作业 一.单选题(每题5分,总分25分) 1. 在MySQL中,一般使用( A )语句来指定一个已有数据库作为当前工作数据库. A.USED B.USE C.BEGIN D.GO ...

  10. manim边做边学--交替变换

    今天,我们将介绍 Manim 中两个用于交替变换的动画类:CyclicReplace 和 Swap. 无论是在展示数学概念的动态变化,还是在图形设计中呈现元素的巧妙交互,这两个动画类都扮演着重要角色. ...