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]
相关推荐
OPEN-F1 小时前
C++20新特性精讲:概念、范围与三路比较
算法·c++20
天天喝旺仔1 小时前
Python asyncio 异步编程实战:用协程与事件循环构建高性能网络服务
服务器·网络·python·性能优化·fastapi
2601_962298092 小时前
零基础学大数据分析全栈
hadoop·python·spark·实战·大数据分析
@MMiL2 小时前
ST-link与J-link通俗易懂讲解
算法
RAOY的AI笔记2 小时前
GPT-6打破孪生素数猜想最新纪录:AI正在进入数学研究新时代?
人工智能·gpt·算法
quantdash_cc2 小时前
Python 股票 K 线数据质量校验:字段、缺失值、重复行和价格异常
开发语言·python·数据分析·量化交易·股票数据·quantdash
长空任鸟飞_阿康2 小时前
三、《从零手撸 Agent》 · system prompt 与核心参数:调好你的旋钮
人工智能·python·ai·prompt
Nil2082 小时前
leetcode 994腐烂的橘子
算法·leetcode·职场和发展
闻缺陷则喜何志丹2 小时前
【动态规划】P10726 [GESP202406 八级] 空间跳跃|普及+
c++·算法·动态规划·洛谷
一晌小贪欢2 小时前
python-第29天:Python面向对象之多态与抽象类
开发语言·python·数据可视化·面向对象·python办公·python多态