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

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

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

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

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

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

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

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

1、选择排序

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

降序排列,代码实现如下:
# 选择排序
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、插入排序
插入排序原理应该是最容易理解的了,打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
# 插入排序
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、快速排序
在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,取序列的第一个元素,然后以这个元素为分组的基准,利用列表解析式使得它左边的值都比它小,右边的值都比它大。然后再分别对这些序列进行递归排序。
# 快速排序
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、冒泡排序

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

# 冒泡排序
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}')

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

1-40、Python面试1-40题汇总

41、说说Python中的正则表达式?
42、Python如何实现斐波那契数列?
43、说说Python 中 is 和 == 的区别?
44、说说Python如何实现杨辉三角?
45、说说Python中变量的作用域?
46、Python打印九九乘法表有几种方式?
47、Python中列表常见的方法有哪些?
48、说说Python中yield的用法?
49、说说Python中元类是什么?

关注小猿公众号,每天学习一道题

(0)

相关推荐

  • Go 数据结构和算法篇(六):选择排序

    今天 以下文章来源于xueyuanjun ,作者xueyuanjun xueyuanjun学院君的订阅号,我会在这里持续更新优质全栈编程技术教程,包括但不限于 Golang.PHP.JavaScrip ...

  • 七大排序算法总结

    以下所有动图均来源于一像素博客园 以下代码均使用C 编写 完整代码请到这里下载 稳定排序算法:冒泡排序.插入排序.归并排序 时间复杂度不受数据影响:选择排序.归并排序.堆排序 时间复杂度基本小于n2: ...

  • 插入排序

    一.插入排序(InsertSort) 插入排序从第二个数开始,拿出第二个数进行向前插入排序,一直到最后一个数向前做插入排序.算法稳定. 插入排序的时间复杂度为O(n^2),空间复杂度为O(1).最好的 ...

  • 【漫画】七种最常见的排序算法(动图版)

    https://blog.csdn.net/qq_32799165/article/details/87878876 漫画由小猿编写创作 一.冒泡排序 冒泡排序是排序算法中较为简单的一种,英文称为 B ...

  • 交易中17种常见的亏损心里

    交易中17种常见的亏损心里

  • 交易中17种常见的亏损心理

    时间:2021年05月15日 10:51:55 中财网 1.害怕止损,害怕亏损.通常的原因是交易者害怕失败,不敢接受亏损.这样的交易者自尊心比较强. 2.提前平仓.一旦平仓,就不会焦虑:而焦虑的原因是 ...

  • K线中24种常见形态,得之得天下

    为何动态看盘 如何动态看盘 最基础的K线形态的演变 标准型上涨后,不新高新低的操作手法 上涨回撤后的三种演变情况 标准型下跌后的新高不新低的操作手法 下跌回抽后的三种演变情况 头肩底和双顶结构 24种 ...

  • 基于 Python 的 11 种经典数据降维算法

    网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法,包括:PCA.LDA.MDS.LLE. ...

  • 企业经营中几种常见的无偿借款是否有税务风险?

    我们企业在日常经营中会发生一些无偿借款的行为,有的企业老板甚至通过无偿借款的方式从公司账户中拿钱到个人账户.需要注意无偿借款的税务风险问题,以及大致有哪些方式! 一.企业股东张总从公司借款200万元, ...

  • 花卉养殖中几种常见的病害,白粉病、枯叶病、叶斑病等处理方法

    猝倒病 症状:在播种植物的幼苗后,它的嫩茎的基部会出现水渍状的腐烂,直到倒伏.仔细观察植物的上半部分还是保持原来是颜色. 原因:由于土壤过于潮湿,并且经常不见阳光.植物在播种的时候,太密,氮肥给的太多 ...

  • 【专题】数列求和中几种常见的裂项方法(上)

    数列问题是高中阶段的一个重要内容板块,是高考必考的一个内容,主要围绕定义.递推公式.通项公式.前n项公式和及相关性质等方面的问题展开来研究,而这些研究又都是从最简单的等差.等比数列作为切入点来展开的, ...

  • 数列求和中几种常见的裂项方法(上)

    开篇有益 数列问题是高中阶段的一个重要内容板块,是高考必考的一个内容,主要围绕定义.递推公式.通项公式.前n项公式和及相关性质等方面的问题展开来研究,而这些研究又都是从最简单的等差.等比数列作为切入点 ...