leetcode 排序算法汇总

快速排序

def quicksort(arr):

if len(arr) <= 1:

return arr

else:

pivot = arr[len(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 arr[j] > arr[j+1]:

交换

arr[j], arr[j+1] = arr[j+1], arr[j]

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 = arr[i] # 当前要插入的元素

j = i - 1

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

while j >= 0 and key < arr[j]:

arr[j + 1] = arr[j] # 将已排序部分的元素向后移动

j -= 1

插入当前元素

arr[j + 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 = arr[mid]

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不在数组中

相关推荐
菜鸟丁小真2 分钟前
LeetCode hot100-287.寻找重复数和994.腐烂的橘子
数据结构·算法·leetcode·知识点总结
发发就是发31 分钟前
USB系统架构概述:从一次诡异的枚举失败说起
驱动开发·单片机·嵌入式硬件·算法·fpga开发
少许极端32 分钟前
算法奇妙屋(四十七)-ST表
算法·st表·rmq
kishu_iOS&AI1 小时前
Pytorch —— 自动微分模块
人工智能·pytorch·python·深度学习·算法·线性回归
北风toto1 小时前
深入解析JWT Token生成原理与安全加密技术详解
算法·安全·哈希算法
DeepModel1 小时前
通俗易懂讲透 EM 算法(期望最大化)
人工智能·python·算法·机器学习
Pentane.1 小时前
【力扣hot100】【Leetcode 15】三数之和|暴力枚举 双指针 算法笔记及打卡(14/100)
数据结构·笔记·算法·leetcode
不知名的老吴1 小时前
高阶函数的应用与函数对象概念
算法
Mr_pyx1 小时前
【LeetCode Hot 100】 - 缺失的第一个正数完全题解
数据结构·算法
wydxry1 小时前
深入解析自适应光学中的哈特曼波前传感技术:原理、算法与智能化前沿
大数据·人工智能·算法