Python中几种常见的排序算法?

简介: 公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!

小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。


废话不多说,开始今天的题目:


问:说说Python中几种常见的排序算法?

答:大家都知道排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。


在算法中,排序算法分为冒泡排序,选择排序,插入排序,快速排序,归并排序,希尔排序,基数排序,堆排序,计数排序,桶排序等。


下面分别来说说几种常见的排序算法:


1、选择排序

选择排序其实就是取第一个数去跟后面的数比较,然后一轮之后得到最小的数在第一个,然后开始取第二个,重复之前的比较。

1.gif

降序排列,代码实现如下:

# 选择排序
def selectionSort(nums):
for i in range(len(nums) - 1):
# 记录最小数的索引
        minIndex = i
for j in range(i + 1, len(nums)):
if nums[j] < nums[minIndex]:
                minIndex = j
# i 不是最小数时,将 i 和最小数进行交换
if i != minIndex:
            nums[i], nums[minIndex] = nums[minIndex], nums[i]
return nums
if __name__ == '__main__':
    nums = [1, 34, 2, 23, 23, 53, 24, 67, 44, 33, 19, 12]
    print(f'选择排序开始>待排序列表{nums}')
    sorted_nums = selectionSort(nums)
    print(f'选择排序完成>新列表{sorted_nums}')
运行后结果:
选择排序开始>待排序列表[1, 34, 2, 23, 23, 53, 24, 67, 44, 33, 19, 12]
选择排序完成>新列表[1, 2, 12, 19, 23, 23, 24, 33, 34, 44, 53, 67]


2、插入排序


插入排序原理应该是最容易理解的了,打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

2.gif

# 插入排序
def insertionSort(nums):
for i in range(len(nums)):
        preIndex = i-1
        current = nums[i]
while preIndex >= 0 and nums[preIndex] > current:
            nums[preIndex+1] = nums[preIndex]
            preIndex-=1
        nums[preIndex+1] = current
return nums
if __name__ == '__main__':
    nums = [1, 34, 2, 23, 23, 53, 24, 67, 44, 33, 19, 12]
    print(f'选择排序开始>待排序列表{nums}')
    sorted_nums = insertionSort(nums)
    print(f'选择排序完成>新列表{sorted_nums}')

3、快速排序


在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,取序列的第一个元素,然后以这个元素为分组的基准,利用列表解析式使得它左边的值都比它小,右边的值都比它大。然后再分别对这些序列进行递归排序。

3.gif

# 快速排序
def quicksort(arr):
if len(arr) <= 1:
return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)
if __name__ == '__main__':
    nums = [1, 34, 2, 23, 23, 53, 24, 67, 44, 33, 19, 12]
    print(f'选择排序开始>待排序列表{nums}')
    sorted_nums = quicksort(nums)
    print(f'选择排序完成>新列表{sorted_nums}')


4、冒泡排序

重复地走访过要排序的元素列,依次比较两个相邻的元素。如果顺序错误,就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

4.gif

# 冒泡排序
nums = [1, 34, 2, 23, 23, 53, 24, 67, 44, 33, 19, 12]
print(f'冒泡排序(降序)开始>待排序列表{nums}')
for j in range(len(nums) - 1):
        for k in range(len(nums) - 1):
            if nums[k] < nums[k + 1]:
                nums[k], nums[k + 1] = nums[k + 1], nums[k]
print(f'冒泡排序(降序)完成>新列表{nums}')

如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

相关文章
|
11天前
|
机器学习/深度学习 人工智能 算法
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
海洋生物识别系统。以Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经网络算法,通过对22种常见的海洋生物('蛤蜊', '珊瑚', '螃蟹', '海豚', '鳗鱼', '水母', '龙虾', '海蛞蝓', '章鱼', '水獭', '企鹅', '河豚', '魔鬼鱼', '海胆', '海马', '海豹', '鲨鱼', '虾', '鱿鱼', '海星', '海龟', '鲸鱼')数据集进行训练,得到一个识别精度较高的模型文件,然后使用Django开发一个Web网页平台操作界面,实现用户上传一张海洋生物图片识别其名称。
94 7
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
|
9天前
|
存储 缓存 算法
Python中常用的数据结构与算法优化技巧指南
Python是一种强大而灵活的编程语言,它提供了丰富的数据结构和算法库,但是在处理大规模数据或者需要高效运行的情况下,需要考虑一些优化技巧。本文将介绍一些Python中常用的数据结构与算法优化技巧,并附带代码实例,帮助你更好地理解和运用。
|
1天前
|
机器学习/深度学习 人工智能 算法
【服装识别系统】图像识别+Python+人工智能+深度学习+算法模型+TensorFlow
服装识别系统,本系统作为图像识别方面的一个典型应用,使用Python作为主要编程语言,并通过TensorFlow搭建ResNet50卷积神经算法网络模型,通过对18种不同的服装('黑色连衣裙', '黑色衬衫', '黑色鞋子', '黑色短裤', '蓝色连衣裙', '蓝色衬衫', '蓝色鞋子', '蓝色短裤', '棕色鞋子', '棕色短裤', '绿色衬衫', '绿色鞋子', '绿色短裤', '红色连衣裙', '红色鞋子', '白色连衣裙', '白色鞋子', '白色短裤')数据集进行训练,最后得到一个识别精度较高的H5格式模型文件,然后基于Django搭建Web网页端可视化操作界面,实现用户在界面中
6 1
【服装识别系统】图像识别+Python+人工智能+深度学习+算法模型+TensorFlow
|
11天前
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
144 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
12天前
|
机器学习/深度学习 人工智能 算法
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
球类识别系统,本系统使用Python作为主要编程语言,基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集 '美式足球', '棒球', '篮球', '台球', '保龄球', '板球', '足球', '高尔夫球', '曲棍球', '冰球', '橄榄球', '羽毛球', '乒乓球', '网球', '排球'等15种常见的球类图像作为数据集,然后进行训练,最终得到一个识别精度较高的模型文件。再使用Django开发Web网页端可视化界面平台,实现用户上传一张球类图片识别其名称。
107 7
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
|
2天前
|
算法 安全 网络安全
网络安全&密码学—python中的各种加密算法
数据加密是一种保护数据安全的技术,通过将数据(明文)转换为不易被未经授权的人理解的形式(密文),以防止数据泄露、篡改或滥用。加密后的数据(密文)可以通过解密过程恢复成原始数据(明文)。数据加密的核心是密码学,它是研究密码系统或通信安全的一门学科,包括密码编码学和密码分析学。
|
8天前
|
算法 数据中心 Python
基于python雪花算法工具类Snowflake-来自chatGPT
基于python雪花算法工具类Snowflake-来自chatGPT
15 4
|
9天前
|
机器学习/深度学习 算法 数据挖掘
Python机器学习10大经典算法的讲解和示例
为了展示10个经典的机器学习算法的最简例子,我将为每个算法编写一个小的示例代码。这些算法将包括线性回归、逻辑回归、K-最近邻(KNN)、支持向量机(SVM)、决策树、随机森林、朴素贝叶斯、K-均值聚类、主成分分析(PCA)、和梯度提升(Gradient Boosting)。我将使用常见的机器学习库,如 scikit-learn,numpy 和 pandas 来实现这些算法。
|
14天前
|
存储 算法 Python
python常用算法(5)——树,二叉树与AVL树(一)
python常用算法(5)——树,二叉树与AVL树
|
15天前
|
IDE 前端开发 开发工具
怎么在isort Python 代码中的导入语句进行排序和格式化
`isort` 是一个Python工具,用于自动排序和格式化代码中的导入语句,提高代码整洁度和可读性。它支持自动排序、保留空白和注释、自定义排序规则、与多种编辑器集成以及命令行使用。安装`isort`可通过`pip install isort`,使用时可直接在Python代码中导入或通过命令行处理文件。示例展示了如何在代码中使用`isort`进行导入排序,包括基本排序、自定义设置和处理多个文件。`isort`适用于标准库、第三方库和自定义模块的导入排序,还可忽略特定导入,并能与IDE和编辑器插件集成,提升开发效率。