【校招VIP】排序算法之快速排序

本文深入探讨了快速排序这一经典算法,介绍了其分治思想和代码实现。同时,结合实例讲解了如何利用快速排序在nlogn的时间复杂度内完成员工ID排序和IP地址排序。此外,还提及了其他排序算法如堆排序和冒泡排序,强调了它们在时间和空间复杂度上的特点。
摘要由CSDN通过智能技术生成

考点介绍:

排序算法属于数据结构和算法的基础内容,并且也是大厂笔试中的高频考点。基本思想是:

1.先取出数列中的第一个数作为基准数
2将数列中比基准数大的数全部放在它的右边,比基准数小的数全部放在它的左边
3.然后在对左右两部分重复第二步,直到各区间只有一个数                

本期分享的排序算法之快速排序,分为试题、文章以及视频三部分。

答案详情解析和文章内容可扫下方二维码或链接即可查看!

一、考点题目

1.有一个公司有若干员工,要求设计一个签到系统来记录员工的签到顺序,并能够在nlogn的时间复杂度内利用尽可能少的辅助空间将签到的员工按照员工id进行排序。

正确答案:思路:在所有算法中只有堆排序和归并排序能够达到时间复杂度的要求,而堆排序对空间的要求又要优于归并排序,所以最后采用了堆排序来实现。

2.string = "192.0.0.1?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.1"

要求:返回一个IP数组,并且按IP最后一位排序返回。
P.S.语言随意,只需要能够正确排序返回接口。(Java、Python、Shell均可)

正确答案:

import re

s = "192.0.0.1?!289.0.0.1!0.0.0.0!192.163.10.20?192.0.0.1"
ips = re.split(r"\?!|!|\?", s)

def lastOne(i):
return i.split('.')[-1]

ips.sort(key=lastOne)
print(ips)

3.快速排序的基本思想是什么?

正确答案: 

该思想可以概括为:挖坑填数 + 分治法。

1、从要排序的数据中取一个数为“基准数”。

2、通过一趟排序将要排序的数据分割成独立的两部分,其中左边的数据都比“基准数”小,右边的数据都比“基准数”大。

3、然后再按步骤2对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

4.快速排序的代码实现。

(扫下方海报二维码查看完整版答案)

二、考点文章

1.高级排序算法——快速排序

快速排序名字可不是盖的,很多程序语言标准库实现的内置排序都有它的身影,我们就直奔主题吧。 和归并排序一样,快排也是一种分而治之(divide and conquer)的策略。归并排序把数组递归成只有单个元素的数组,之后再不断两两 合并,最后得到一个有序数组。这里的递归基本条件就是只包含一个元素的数组,当数组只包含一个元素的时候,我们可以认为它本来就是有序的(当然空数组也不用排序)。

2.三大经典排序 | 冒泡排序,选择排序,快速排序

排序算法是日常使用最频繁的一个算法,生活中也很常见什么排队呀按照高矮次序呀,分数按照一个从高到低的排序等等,但是如果是要设计出来面对基数很大又要很快的排序方法这就是需要很大难度了,先给大家看看排序的种类有哪些,和其对应的时间空间复杂度。

3.字符串返回数组并排序(算法题)

string = "192.0.0.1?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.1"
#要求返回一个ip数组,并且按照ip最后一位排序返回

第一想法就是,把这串字符串根据正则去除里面的特殊符号,得到一个新的数组,然后将新数组里面的元素切片,根据得到元素最后一个数字进行排列,从而得到结果返回这个数组。

(扫下方海报二维码查看完整版)

三、考点视频

直接插入排序和最佳复杂度

更多资讯可搜索校招VIP小程序查看哦。

PC端链接:https://xiaozhao.vip/dTopic/detail/425
移动端链接:https://m.xiaozhao.vip/dTopic/detail/425

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值