提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
整理一些常用的排序算法
一、冒泡排序
从左往右冒泡,比较相邻的两个元素,较小的放左边;只需选择前n-1个数进行排序,第一次排序需要比较n-1次,每次排序后下一次排序次数减1
def maopao(nums):
n = len(nums)
for i in range(n-1):
for j in range(n-1-i):
if nums[j]>nums[j+1]:
nums[j],nums[j+1] = nums[j+1],nums[j]
二、插入排序
每次从指针右边数组中提取一个元素和指针左边数组元素比较,放入合适的位置,直到指针指向数组末尾
def insert_sort(nums):
n = len(nums)
for i in range(1,n):
num = nums[i]
j = i-1
while j>=0:
if nums[j]>num:
nums[j+1] = nums[j]
j-=1
else:
nums[j+1] = num
break
else:
nums[0] = num
三、选择排序
不断从指针右边的数组中找到最小元素,将最小元素依次放在前面,指针右移,不断循环直到指针指向末尾
def select_sort(nums):
n = len(nums)
for i in range(n-1):
num = nums[i]
index = i
for j in range(i,n):
if nums[j]<num:
index = j
num = nums[j]
nums[index],nums[i] = nums[i],nums[index]
四、归并排序
归并算法的核心思想是分治法,就是将一个数组一刀切两半,递归切,直到切成单个元素,然后重新组装合并,单个元素合并成小数组,两个小数组合并成大数组,直到最终合并完成,排序完毕。
1.归并
将mid分成的两个有序数组合并为一个有序的大数组
def guibing(nums,left,mid,right):
temp = <