面试刷题必看!Python中的5大排序算法及其实现代码
排序是每个 IT 工程师和开发人员必备的知识技能。不仅要通过编程面试,而且要了解算法本身。不同的排序算法完美地展示了算法设计如何对程序的复杂性、速度和效率产生如此大的影响。
让我们来看看排名前5,也是最常见,面试中经常被问到的排序算法,看看如何用Python实现它们!
1.冒泡排序
冒泡排序是 CS 入门课程中最常讲授的一种,因为它清楚地说明了排序的工作原理,同时又简单又易于理解。 冒泡排序将逐步遍历列表并比较相邻的元素对。如果元素的顺序错误,则会交换这些元素。重复对列表中未排序部分的遍历,直到对列表进行排序。 因为冒泡排序重复地通过列表中未排序的部分,所以它的最坏情况复杂性为O(n²)。
2.选择排序
选择排序也相当简单,优于冒泡排序。如果你要在这两者之间进行选择,那么最好使用默认的“右选择排序”。使用选择排序,我们将输入列表/数组分为两部分: 已排序项的子列表和构成列表其余部分的剩余项的子列表。
我们 首先在未排序的子列表中找到最小的元素,并将其放在已排序子列表的末尾。 因此,我们不断地获取最小的未排序元素,并将其按排序顺序放入已排序的子列表中。此过程将重复进行,直到列表完全排序。
3.插入排序
插入排序比冒泡排序和选择排序都要快,而且可以说更加简单。就像在玩纸牌游戏时,洗牌的过程就是反复进行插入排序! 在每次循环迭代中,插入排序从数组中删除一个元素。然后在另一个排序数组中查找该元素所属的位置,并将其插入其中。 它重复这个过程,直到没有输入元素保留。
4.合并排序
合并排序是一个完美的分而治之的算法例子。使用这种算法只需要通过以下两个主要步骤:
- (1) 连续分割未排序的列表,直到有N个子列表,其中每个子列表都有1个“未排序”的元素,N是原始数组中的元素数。
- (2) 反复合并,即一次将两个子列表合并在一起,生成新的已排序子列表,直到所有元素都完全合并到一个已排序的数组中。
5.快速排序
快速排序也是一种分而治之的算法,与合并排序一样。尽管它有点复杂,但在大多数标准实现中,它的执行速度比合并排序快得多,而且很少达到O(n²)的最坏情况复杂度。它有三个主要步骤:
- (1) 我们首先从数组中选择一个元素,称之为pivot。
- (2) 将小于轴的所有元素移到轴的左侧;将大于轴的所有元素移到轴的右侧。这称为分区操作。
- (3) 递归地将上述2个步骤分别应用于元素的每个子数组,这些元素的值比上一个轴的值小或大。如果大家对Python感兴趣的话,可以加一下我的微信哦:abb436574,免费领取一套学习资料和视频课程哟~
面试刷题必看!Python中的5大排序算法及其实现代码相关推荐
- 面试中的 10 大排序算法总结
前言 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗,只要熟悉了思想,灵活运用也不是难事. ...
- 十大排序算法思想和代码总结(Python版)
Table of Contents 一.概述 二.算法简介及代码展示 1.冒泡排序($O(n^2)$) 2.简单选择排序($O(n^2)$) 3.简单插入排序($O(n^2)$) 4.堆排序($O(n ...
- 无序数组求第k大的数 python_【python刷题】寻找数组中第K大/小的数
使用堆 import heapq def findKthLargest(nums, k): stack = [] for num in nums: heapq.heappush(stack, num) ...
- 【面试刷题复习】更新中 2021.8.30
1 数组 015 三数之和 2 回溯 046 全排列 3 动态规划 剑指42 连续子数组的最大和 416 分割等和子集 494 目标和 139 单词拆分 279 完全平方数 322 零钱兑换 377 ...
- 【Python刷题篇】Python从0到入门3|循环、条件复习、元组入门、字典入门
Python从0到入门3目录 前言 Q1:团队分组 Q2:禁止重复注册 Q3:元组-牛客运动会 Q4:字典-遍历字典 Q5:字典-毕业生就业调查 Q6:姓名与学号 总结 前言 - 本期是Python从 ...
- 【Python刷题篇】Python从0到入门4|字典复习、函数入门、综合实践
Python从0到入门3目录 前言 Q1:字典复习-首都 Q2:函数入门-求差 Q3:函数入门-牛牛的朋友 Q4:综合案例:自动售卖饮料机 Q5:综合案例-被8整除的数字 Q6:综合案例-披萨店的订单 ...
- 1000 面试题,BAT 机器学习面试刷题宝典!
点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要好多分钟 跟随小博主,每天进步一丢丢 ID:Dr.Wu 公众号:大鱼AI 来源:CSDN 编辑:三石 刷题,是面试前的必备环节.本文作者便总结了 ...
- leetcode c程序总提示主函数_帅气中国小哥出“大招”,程序员跳槽面试刷题必备...
整理 | 一一 出品 | AI科技大本营 春节刚过,年终奖收入囊中,属于工程师们一年一度的跳槽季也来了. 跳槽后薪水翻倍自然爽歪歪,但最怕的是面试翻车,那就悲剧了.可想而知,想要跳槽或者为春招准备的毕 ...
- 肝了一个月,我做了个免费的面试刷题网
大家好,我是鱼皮. 如今找工作.面试实在是太卷了,每轮面试都 必考 八股文,不背不行.网上虽然有很多面试题,但过于分散,就导致很多朋友又不知道到哪去找题.该背哪些题了. 所以我决定做一个完全免费.干净 ...
最新文章
- 如何安装或卸载 Internet Explorer 9?
- 为什么数据挖掘很难成功?
- 最火的前端开发框架Bootstrap使用教程学习!
- 别吵吵,分布式锁也是锁
- helloword,认真就输了
- openwrt lamp
- java 传送解析8583报文_java发送ISO8583报文接口案例
- html 并集选择器,CSS并集选择器
- Qt文档阅读笔记-共享库的创建与调用
- 从源码分析RocketMQ系列-Producer的invokeSync()方法
- 接口测试和性能测试的区别
- CentOS 利用Yum安装mysql后无法启动(MySQL Daemon failed to start.)
- 站点页面Service Unavailable 503的一种解决方法
- Asp.net WebForm使用codeFirst建立和修改数据库小结
- hbase的学习逻辑_HBase-1.0.1学习笔记(二)HBase数据模型
- 汇编语言 王爽 第四版 第一章 检测点1.1
- Java经典编程习题100例,供初学者学习
- 定义Student类,该类中有Sting name和int age两个属性,该类实现Comparable接口,实现根据学生姓名和年龄排序,该类重写toString()输出学生的姓名和年龄。
- Vue中的filter过滤器是使用方法
- excel 文件加密