def insert_sort(li):
for i in range(0,len(li)-1): # 有序部分放在最前面
j = i
while li[j+1] < li[j] and j >= 0:
li[j],li[j+1] = li[j+1],li[j]
j -= 1
return li

快速排序

快速排序辅助函数,排一次(相当于二分一次)数据交换情况

def partition(li,left,right):
tmp = li[left]
start = left
while left < right:
while tmp <= li[right] and left < right:
right -= 1
while tmp >= li[left] and left < right:
left += 1
li[left],li[right] = li[right],li[left] # 直接交换左边大于tmp和右边小于tmp的数据,因为反正最后都只剩一个空位
li[left],li[start] = li[start],li[left]
return left # right也可以,需要记录下分割的下标

快速排序,升序,递归

def quick_sort(li,left,right):
if left < right:
mid = partition(li,left,right)
quick_sort(li,left,mid-1) # 用li作为输入的列表,是因为li是全局变量,所以每次修改li都会改变
quick_sort(li,mid+1,right) # 每次迭代用left和right表示下一次分割的下标位置
return li

堆排序

调整堆顶元素,其他部分都是最大堆,需要输入调整的第一个下标和最后一个下标

堆顶元素不一定是最大元素,堆其他部分满足最大堆

def sift(li,first,last):
left = 2 * first + 1
right = 2 * first + 2
while right <= last:
if li[first] >= li[right] and li[first] >= li[left]: # 父节点最大,则直接退出
break
else:
if li[left] > li[right]: # 左节点最大
li[first],li[left] = li[left],li[first]
first = left
else: # 右节点最大
li[first], li[right] = li[right], li[first]
first = right
left = 2 * first + 1 # 下一层
right = 2 * first + 2

堆排序,升序,最大堆

def heap_sort(li):

建立堆,从下到上(最底层到顶层)

for i in range((len(li)-2)//2,-1,-1):
sift(li,i,len(li)-1)

排序,将最后一个元素替换到顶元素,顶元素已经排好序了

for i in range(len(li)-1,0,-1):
li[0],li[i] = li[i],li[0]
sift(li,0,i-1)
return li

归并排序

一个列表,前部分顺序排好,后部分顺序排好,将两部分归并

def merge(li,first,mid,last):
tmp_i = first
tmp_j = last
tmp_list = [] # first,mid,last都是下标
first2 = mid+1
while first <= mid and first2 <= last:
if li[first] < li[first2]:
tmp_list.append(li[first])
first += 1
else:
tmp_list.append(li[first2])
first2 += 1
if first <= mid: # 判断+循环,可以直接用while
for i in range(first,mid+1):
tmp_list.append(li[first])
first += 1
elif first2 <= last:
for i in range(first2,last+1):
tmp_list.append(li[first2])
first2 += 1
li[tmp_i:tmp_j+1] = tmp_list # 将合并得到的列表送入li中,不然最后的结果没有变化了
return tmp_list

归并排序,升序

def merge_sort(li,first,last): # 因为需要递归(像树一样),所以写入另外两个参数

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

在这里插入图片描述

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-rYDsTJbH-1712509147726)]

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐