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
  • 7
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 中的十大排序算法包括冒泡排序、选择排序、快速排序、归并排序、堆排序、插入排序、希尔排序、计数排序、桶排序和基数排序。 冒泡排序通过比较相邻的元素并交换它们的位置来排序。选择排序通过选择最小的元素并将其放在已排序的序列的末尾来排序。快速排序使用分治法将列表分成较小的子列表,并通过递归地排序子列表来完成排序。归并排序将列表分成较小的子列表,并通过递归地排序子列表,然后将它们合并在一起来完成排序。堆排序使用堆数据结构来排序元素。插入排序通过将未排序的元素插入已排序的序列中来排序。希尔排序是插入排序的一种变体,通过将元素分成较小的子序列并分别进行插入排序来排序。计数排序通过计算每个元素的出现次数,然后按照计数的顺序重构列表来排序。桶排序将元素分配到不同的桶中,然后对每个桶进行排序,最后将桶中的元素合并在一起来完成排序。基数排序根据元素的位数进行排序,从最低位开始依次排序,最终得到有序列表。以上是 Python 中的十大排序算法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [用Python实现十大经典排序算法](https://blog.csdn.net/lemonbit/article/details/121738385)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值