Python编程:排序算法之归并排序

简介: Python编程:排序算法之归并排序

归并排序


时间复杂度O(nlogn)

空间复杂度O(n)

假设现在的列表分两段有序,将其合成为一个有序列表


分解: 将列表越分越小,直至分成一个元素

一个元素是有序的

合并:将两个有序的列表合并,列表越来越大

代码实现

# 归并排序
import random
import sys
sys.setrecursionlimit(10000) # 设置递归深度默认1000
# 一次归并,合并有序序列
def merge(lst, low, mid, high):
    i = low
    j = mid + 1
    lst_temp = []
    while i<=mid and j <= high:
        if lst[i] <= lst[j]:
            lst_temp.append(lst[i])
            i += 1
        else:
            lst_temp.append(lst[j])
            j += 1
    while i <= mid:
        lst_temp.append(lst[i])
        i += 1
    while j <= high:
        lst_temp.append(lst[j])
        j += 1
    lst[low: high+1] = lst_temp
#归并排序
def merge_sort(lst, low, high):
    if low < high:
        mid = (low + high)//2
        merge_sort(lst, low, mid)
        merge_sort(lst, mid+1, high)
        merge(lst, low, mid, high)
lst = list(range(10))
random.shuffle(lst)
merge_sort(lst, 0, 9)
print(lst)
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
相关文章
|
1天前
|
机器学习/深度学习 人工智能 数据可视化
Python:探索编程之美
Python:探索编程之美
9 0
|
1天前
|
机器学习/深度学习 人工智能 数据处理
Python编程的魅力与实践
Python编程的魅力与实践
|
2天前
|
算法 数据可视化 Python
Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法
Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法
12 6
|
2天前
|
SQL 关系型数据库 MySQL
第十三章 Python数据库编程
第十三章 Python数据库编程
|
2天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
3天前
|
机器学习/深度学习 算法 搜索推荐
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
30 12
|
8天前
|
安全 数据处理 开发者
《Python 简易速速上手小册》第7章:高级 Python 编程(2024 最新版)
《Python 简易速速上手小册》第7章:高级 Python 编程(2024 最新版)
19 1
|
8天前
|
人工智能 数据挖掘 程序员
《Python 简易速速上手小册》第1章:Python 编程入门(2024 最新版)
《Python 简易速速上手小册》第1章:Python 编程入门(2024 最新版)
35 0
|
8天前
|
算法 数据可视化 Python
Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
12 0
|
8天前
|
数据可视化 算法 数据挖掘
PYTHON实现谱聚类算法和改变聚类簇数结果可视化比较
PYTHON实现谱聚类算法和改变聚类簇数结果可视化比较