python排序算法,冒泡排序和快排

对于排序算法中比较知名的两个算法,分别就是冒泡排序和快速排序,在日常学习和使用中都会听到这两种排序算法的名称,这里主要介绍如何使用python来实现这两种排序算法。

冒泡排序的实现:一是从集合第一个元素开始,每两个相邻的元素进行比较大小的行为,然后令数值较大的元素向后移动,交换这两个元素的位置,依次对比,直到数组的末尾为结束。经过这一次完整的对比之后,即可找到整个集合中最大的那个元素,并且这个元素已经经过移动后,到达了最后的一个位置。

二是进行第二次排序,第二次排序同样是从元素集合的第一个元素开始,往后进行对比,相邻两个元素较大者往后移位置,一直往后对比大小直到倒数的第二个位置结束。这次得到的结果是第二大的元素到了倒数第二个位置。

三就是根据以上步骤进行对比,每一趟都会得到一个元素自己所在的最终的位置,直到所有元素都完成了排序,就得到了最终的排序好的结果。

添加图片注释,不超过 140 字(可选)

B = [20, 30, 90, 10, 28, 49, 20, 41, 42, 78],对B集合进行了冒泡排序后的输出结果

复制代码
def bubbleSort(nums):
    for i in range(len(nums) - 1):
        flag = 0
        for j in range(len(nums) - 1 - i):
            if nums[j] > nums[j + 1]:
                temp = nums[j + 1]
                nums[j + 1] = nums[j]
                nums[j] = temp
                flag = 1
        if flag == 0:
            break
    return nums

以上是冒泡排序的python实现。

对于冒泡排序的时间复杂度较高的问题,对冒泡排序进行优化之后得出的快排。

快排的核心思想就是经过一趟比较即可得到某个元素在排序后的最终位置。

其实现过程是在一个集合中{a1,...,an},如果选取a1作为基准的元素,设置i,j指针,初始值为i=0,j=n-1,然后将a1保存为关键key=a1。从后往前进行搜索,过程中从如果j元素的值大于key,则j--,一直直到找到第一个比key小的值,然后就将i的值和j的值交换位置。然后就是从前往后搜索了,从头开始查找,如果i元素的值比key的值大的话,则i++,一直到找到比key的值大的元素,又将i和j的值进行位置交换。一直返回执行以上操作,直到i和j下标一样,就是完成了一趟排序了。这个时候key所在的位置就是其在最终排序中的位置,而对于这个key左右的子集合,是可以套用以上的排序过程。直到最后就是分的每个子集合都只有一个元素为止。即完成了排序。

添加图片注释,不超过 140 字(可选)

快速排序的实现如下:

复制代码
def quickSort(nums, low, high):
    i = low
    j = high
    key = nums[i]
    while i < j:
        while i < j and key <= nums[j]:
            j -= 1
        nums[i] = nums[j]
        while i < j and key >= nums[i]:
            i += 1
        nums[j] = nums[i]
    nums[i] = key
    quickSort(nums, low, i - 1)
    quickSort(nums, i + 1, high)
相关推荐
胡耀超33 分钟前
Token的八副面孔:为什么“词元“不需要更好的翻译,而需要更多的读者
大数据·人工智能·python·agent·token·代币·词元
第一程序员2 小时前
Python与前端集成:构建全栈应用
python·github
程序员小远2 小时前
Jmeter基础:Jmeter聚合报告详解
自动化测试·软件测试·python·测试工具·jmeter·测试用例·压力测试
潇冉沐晴2 小时前
DP——背包DP
算法·背包dp
凌波粒2 小时前
D2L学习笔记:安装、张量与数据处理
笔记·python·学习·pandas
coderlin_2 小时前
从0开始构建Claude Code
python·ai编程
逆境不可逃2 小时前
LeetCode 热题 100 之 543. 二叉树的直径 102. 二叉树的层序遍历 108. 将有序数组转换为二叉搜索树 98. 验证二叉搜索树
算法·leetcode·职场和发展
计算机安禾2 小时前
【数据结构与算法】第19篇:树与二叉树的基础概念
c语言·开发语言·数据结构·c++·算法·visual studio code·visual studio
副露のmagic3 小时前
哈希章节 leetcode 思路&实现
算法·leetcode·哈希算法
副露のmagic3 小时前
字符串章节 leetcode 思路&实现
windows·python·leetcode