leetcode常规算法题复盘(基础篇)——十大排序算法(一)

因为上一期挖了大坑,菜鸡博主说到做到,用python复现了一遍《十大排序算法》作为基础篇庆祝博客的回归。废话少说,上代码。

一、冒泡排序

双层循环判别语句,最后交换值

复制代码
 1   ##############################
 2  #         1、冒泡排序         #
 3 #############################
 4 def BubbleSort(array):
 5     for i in range(len(array)-1):
 6         for j in range(len(array)-i-1):
 7             if array[j]>array[j+1]:
 8                 temp = array[j+1]
 9                 array[j+1] = array[j]
10                 array[j] = temp
11     return array
复制代码

二、选择排序

双层循环记录最小(大)值索引,最后交换值

复制代码
 1   ##############################
 2  #         2、选择排序         #
 3 #############################
 4 def SelectionSort(array):
 5     for i in range(len(array)):
 6         min_index = i
 7         for j in range(i,len(array)):
 8             if array[j]<array[min_index]:
 9                 min_index = j
10         temp = array[i]
11         array[i] = array[min_index]
12         array[min_index] = temp
13     return array
复制代码

 三、插入排序

注意数值向后传递。

复制代码
 1   ##############################
 2  #         3、插入排序         #
 3 #############################
 4 def InsertionSort(array):
 5     for i in range(1,len(array)):
 6         cur = array[i]
 7         pre = i-1
 8         while(pre>=0 and cur<array[pre]):
 9             array[pre+1] = array[pre]
10             pre += -1
11         array[pre+1] = cur
12     return array
复制代码

 四、希尔排序(1/2方法)

用于处理大型数据的插入排序升级版,注意1变为gap,同向后传递值。

复制代码
 1   ##############################
 2  #    4、希尔排序(1/2方法)      #
 3 #############################
 4 def ShellSort(array):
 5     lenth = len(array)
 6     gap = lenth//2
 7     while(gap):
 8         print(gap)
 9         for i in range(gap,lenth):
10             cur = array[i]
11             pre = i-gap
12             while(pre>=gap-1 and cur<array[pre]):
13                 array[pre+gap] = array[pre]
14                 pre = pre-gap
15             array[pre+gap] = cur
16         gap = gap//2
17     return array
复制代码

 

五、归并排序

分治、递归思想

复制代码
 1   ##############################
 2  #        5、归并排序          #
 3 #############################
 4 def MergeSort(array):
 5     lenth = len(array)
 6     if lenth<2:
 7         return array
 8     middle = lenth//2
 9     left = array[0:middle]
10     right = array[middle:]
11     return merge(MergeSort(left),MergeSort(right))
12 
13 def merge(left,right):
14     result = []
15     while(len(left)>0 and len(right)>0):
16         if left[0] <= right[0]:
17             result.append(left.pop(0))
18         else:
19             result.append(right.pop(0))
20     while(len(left)):
21         result.append(left.pop(0))
22     while(len(right)):
23         result.append(right.pop(0))
24     return result
复制代码

 

posted @   苏荷琴玖  阅读(251)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示