Python排序算法

两数交换原理

在了解算法之前先了解两数交换的原理

复制代码
a,b = b,a   原理: 异或算法
当前元素值: arr[i]
前一个元素:  arr[i-1]    后一个元素:  arr[i+1]

准备要实验的列表

python 复制代码
#0.准备列表 --随机列表,范围,长度自定义
import random
def random_list(start, end,length):
    arr = []
    for i in range(length):
        arr.append(random.randint(start, end))
    return arr

res = random_list(1,10,5)
print(res)

冒泡排序

原理解析

复制代码
 冒泡排序
        元素两两进行比较,每一次排序后较大的值往后移(交换为止)
        技巧:排序n-1    每次比较n - 1 - i次

代码展示

python 复制代码
def bubble_sort(arr):
    #控制排序次数
    for i in range(len(arr)-1):
        #控制比较的次数
        for j in range(len(arr)-i-1):
            #判断元素大小,将较大的值往后移
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
        print(f"第{i + 1}次排序的结果为:{arr}")
    return arr

res = bubble_sort(res)
print(res)

选择排序

原理解析

复制代码
选择排序
        1.按索引顺序从0 ~ length-1每次假设一个最小值,获取最小值索引
        2.按最小值索引后的元素比较大小,如果后续元素笑了,则记录最小值索引,最后并交换位置
        技巧: 总排序次数 length-1

代码展示

python 复制代码
def selection_sort(arr):
    #控制排序次数
    for i in range(len(arr) - 1):
        #定义最小值的key
        key = i     #等价于每次假设的索引从0 - length-1
        for j in range(i + 1, len(arr)):
            #判断后续元素中比假设的key索引对应元素小的话,则记录索引(最小值索引)
            if arr[j] < arr[key]:
                #记录最小值索引
                key = j
        arr[i], arr[key] = arr[key], arr[i]
        print(f"第{i + 1}次排序的结果为: {arr}")
    return arr
res = selection_sort(res)
print(res)

插入排序

原理解析

复制代码
插入排序
        1.从索引为1开始分配已排序和未排序两组
        2.将未排序的元素依次和已排序的比较,如果小了则交换位置,直到大了位置,等于插入

代码展示

python 复制代码
def insertion_sort(arr):
    #从第二个元素(索引为1) 开始遍历
    for i in range(1, len(arr)):
        #记录当前元素
        j = i
        #控制未排序和已排序的元素进行比较,未排序的为外层索引,已排序的为内层索引
        while arr[j-1] > arr[j] and j > 0:
            #交换位置
            arr[j], arr[j-1] = arr[j-1], arr[j]
            #比较上一个元素
            j -= 1
        print(f"第{i + 1}次排序的结果为: {arr}")
    return arr
res = insertion_sort(res)
print(res)

快速排序

原理解析

复制代码
分治法,选一个 "基准值",将列表分为 "小于基准" 和 "大于基准" 两部分,递归排序子列表

代码展示

python 复制代码
def quick_sort(arr):
    # 递归终止条件:列表长度≤1时无需排序
    if len(arr) <= 1:
        return arr
    # 选择第一个元素作为基准
    pivot = arr[0]
    # 小于基准的元素
    left = [x for x in arr[1:] if x <= pivot]
    # 大于基准的元素
    right = [x for x in arr[1:] if x > pivot]
    # 递归排序左右部分,再合并
    return quick_sort(left) + [pivot] + quick_sort(right)

# 测试
sorted_list = quick_sort(res)
print("快速排序结果:", sorted_list)  # 输出:[11, 12, 22, 25, 34, 64, 90]
相关推荐
Patrick在香港11 分钟前
Claude API 成本直降90%:Prompt Caching 提示词缓存 Python 实战
python·缓存·prompt
没落之王13 分钟前
易学使者郑氏正脉郑冰推演马航事件
大数据·人工智能·算法·机器学习·可用性测试
阿部多瑞 ABU31 分钟前
告别手工核图:基于 .NET + MuPDFCore 的 CAD 等轴测 PDF 材料表提取与新旧版本对比实战
后端·算法·ui·pdf·c#
郝学胜-神的一滴35 分钟前
并查集深度入门:从玄学抽象到 QuickFind & QuickUnion 源码实战
数据结构·c++·python·程序人生·算法·软件开发
比奇堡裤头村36 分钟前
统计学习方法——决策树
算法·决策树·学习方法
她说可以呀42 分钟前
Spring AI 常用 Advisor
人工智能·python·spring
小玮看世界1 小时前
[Python] str() 和 join() 的区别与实战避坑指南
前端·javascript·python
灵晔君1 小时前
【Linux】进程控制(一)——进程创建、进程终止与进程等待
linux·c语言·算法
卷无止境1 小时前
FastAPI 的 WebSocket 装了些什么
后端·python·fastapi
码云骑士1 小时前
108-vLLM推理引擎-PagedAttention-连续批处理-吞吐提升10倍
python·vllm