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]
相关推荐
郝学胜-神的一滴1 小时前
Leetcode 969 煎饼排序✨:翻转间的数组排序艺术
数据结构·c++·算法·leetcode·面试
猿界零零七8 小时前
pip install mxnet 报错解决方案
python·pip·mxnet
I_LPL8 小时前
hot100贪心专题
数据结构·算法·leetcode·贪心
颜酱9 小时前
DFS 岛屿系列题全解析
javascript·后端·算法
WolfGang0073219 小时前
代码随想录算法训练营 Day16 | 二叉树 part06
算法
不只会拍照的程序猿10 小时前
《嵌入式AI筑基笔记02:Python数据类型01,从C的“硬核”到Python的“包容”》
人工智能·笔记·python
Jay_Franklin10 小时前
Quarto与Python集成使用
开发语言·python·markdown
2401_8318249610 小时前
代码性能剖析工具
开发语言·c++·算法
Oueii10 小时前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
2401_8318249611 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python