leetcode 排序算法汇总

快速排序

def quicksort(arr):

if len(arr) <= 1:

return arr

else:

pivot = arrlen(arr) // 2 # 选择中间值作为基准

left = x for x in arr if x \< pivot # 小于基准的放左边

middle = x for x in arr if x == pivot # 等于基准的放中间

right = x for x in arr if x \> pivot # 大于基准的放右边

return quicksort(left) + middle + quicksort(right) # 递归排序

测试快速排序算法

arr = 3, 6, 8, 10, 1, 2, 1

print("原始数组:", arr)

sorted_arr = quicksort(arr)

print("排序后数组:", sorted_arr)

冒泡排序

def bubble_sort(arr):

n = len(arr)

for i in range(n-1):

标志位用于优化,如果在一轮比较中没有元素交换,说明数组已经有序,可以直接结束排序

swapped = False

for j in range(0, n-i-1):

if arrj > arrj+1:

交换

arrj, arrj+1 = arrj+1, arrj

swapped = True

如果没有发生交换,说明数组已经有序,退出循环

if not swapped:

break

return arr

示例

arr = 64, 34, 25, 12, 22, 11, 90

sorted_arr = bubble_sort(arr)

print("Sorted array is:", sorted_arr)

直接插入排序

def insertion_sort(arr):

遍历从1到len(arr)的所有元素

for i in range(1, len(arr)):

key = arri # 当前要插入的元素

j = i - 1

将当前元素与已排序部分的元素进行比较,找到合适的插入位置

while j >= 0 and key < arrj:

arrj + 1 = arrj # 将已排序部分的元素向后移动

j -= 1

插入当前元素

arrj + 1 = key

return arr

示例

if name == "main":

arr = 12, 11, 13, 5, 6

print("原始数组:", arr)

sorted_arr = insertion_sort(arr)

print("排序后数组:", sorted_arr)

二分查找法:

def binary_search(arr, target):

"""

二分查找法

:param arr: 有序数组

:param target: 查找目标

:return: 目标在数组中的索引,如果不存在返回-1

"""

low = 0

high = len(arr) - 1

while low <= high:

mid = (low + high) // 2

guess = arrmid

if guess == target:

return mid

if guess > target:

high = mid - 1

else:

low = mid + 1

return -1

示例

if name == "main":

my_list = 1, 3, 5, 7, 9 # 示例数组

print(binary_search(my_list, 3)) # 输出:1,因为3在数组中的索引位置是1

print(binary_search(my_list, -1)) # 输出:-1,因为-1不在数组中

相关推荐
yi0114 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
灯澜忆梦6 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
小蒋观天下7 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
Evand J7 小时前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
H.莓飛7 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有8 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu1111118 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
黄金龙PLUS8 小时前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
不会就选b8 小时前
算法日常・每日刷题--<动态规划>14
算法
赛博守夜人8 小时前
跨境业务与出海合规之九:海外买量投放与营销虚假流量(Ad Fraud):跨国机房群控与归因欺诈识别算法
算法·安全