Python十大排序算法(亲自实现代码超详细描述)

本文详细介绍了Python中实现的十大排序算法,包括冒泡排序、快速排序、插入排序、希尔排序、选择排序、堆排序、归并排序、计数排序、桶排序和基数排序,每个算法都有详细步骤和代码实现。

前言

你好,我是Dr.叶子,用心写最优美的博客,弹最好听的钢琴!

背景

  • 最近整理知识点,发现在数据结构方面不是很扎实,所以自己重新学习排序算法,结合网上资料,自己深度理解,再利用Python3来实现,与大家分享,也提升自己的知识水平!
  • 本文包含冒泡排序、快速排序、插入排序、希尔排序、选择排序、堆排序、归并排序、计数排序、桶排序、基数排序,每一段代码都有详细的注释。

 

排序分类

在这里插入图片描述


 

一、冒泡排序(交换类)

 
1. 算法步骤:

    ① 从头开始,依次两两比较待排序列表中的相邻元素,若前者比后者大,则交换位置,直到最大的元素排在最后位置,一轮排序完成,重复本步骤;

    ② 每一轮排序完成,将产生 1 个最大元素排在最后,该元素不再参与下一轮比较;

    ③ 待排序列表的长度每轮 -1,即去掉最后一个已经完成排序的元素;

 
2. 演示:

在这里插入图片描述

 
3. 代码实现:

def bubble_sort(List):
    # 1.原列表长度
    n = len(List)
    # 2.依次两两比较
    for i in range(1, n):
        for j in range(0, n - i):
            # 3.前者比后者大,则交换位置
            if List[j] > List[j + 1]:
                List[j], List[j + 1] = List[j + 1], List[j]
    return List


if __name__ == '__main__':
    List = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]
    result = bubble_sort(List)
    print(result)

 

二、快速排序(交换类)

 
1. 算法步骤:

    ① 从原列表中选一个元素,作为"基准值";

    ② 以这个"基准值"为原则,划分成左、右 2 个子列表,大于“基准值”的元素放右列表,小于“基准值”的元素放左列表(等于的可左可右);

    ③ 重复步骤 ① ,继续分别在 2 个子列表中,各自选取"基准值"来划分出新的、各自的左、右子列表;

详细流程,请看静态演示部分图示;

 
2. 演示:

在这里插入图片描述

 
【 静态演示 】:

在这里插入图片描述

 
3. 代码实现:

# 6快速排序
def quick_sort(List):
    # 1.原列表长度
    n = len(List)
    # 2.若列表少于2个元素,返回当前列表(递归的结束条件)
    if n < 2:
        return List
    # 3.选取基准值,这里选择首位元素,并将其从原列表中移除(因为要将剩下的元素分组)
    base = List[0]
    List.remove(base)
    # 3.预先定义空列表,即基准值的左右两个列表
    left, right = [], []
    # 4.遍历剩下的元素
    for value in List:
        if value >= base:
            # 大于等于基准值放右边
            right.append(value)
        else:
            # 小于基准值放左边
            left.append(value)
    # 5.递归,将基准值放中间组合成已完成的有序列表
    return quick_sort(left) + [base] + quick_sort(right)


if __name__ == '__main__':
    List = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]
    result = quick_sort(List)
    print(result)

 

三、插入排序(插入类)

 
1. 算法步骤:

    ① 将原列表第一个元素固定,当成是已排序列表,剩下的所有元素组成待排序列表

    ② 从头开始,依次遍历待排序列表,同时从后往前遍历已排序列表进行比较,插入到合适位置,重复上一步骤;

注意: 待排序列表的元素与已排序列表中的某个元素相等时,则插入到相等元素的后面位置。

 
2. 演示:

在这里插入图片描述

 
3. 代码实现:

def insert_sort(List):
    # 1.原列表长度
    n = len(List)
    # 2.依次遍历“待排序列表”(即原列表第2个元素开始)
    for i in range(1, n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值