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]
相关推荐
钮钴禄·爱因斯晨2 小时前
机器学习(二):KNN算法简介及API介绍(分类、回归)
人工智能·算法·机器学习·分类·回归
如此这般英俊2 小时前
第八章-排序
数据结构·算法·排序算法
靠沿2 小时前
Java数据结构初阶——七大排序算法及“非比较”排序
java·数据结构·排序算法
源代码•宸2 小时前
Leetcode—146. LRU 缓存【中等】(哈希表+双向链表)
后端·算法·leetcode·缓存·面试·golang·lru
pulinzt2 小时前
【python】第六节anacoda+配置Jupyter notebook
人工智能·python·jupyter
郭涤生2 小时前
AWB算法基础理解
人工智能·算法·计算机视觉
逄逄不是胖胖2 小时前
《动手学深度学习》-49Style_Transfer实现
pytorch·python·深度学习
hetao17338372 小时前
2026-01-21~22 hetao1733837 的刷题笔记
c++·笔记·算法
Hcoco_me2 小时前
大模型面试题91:合并访存是什么?原理是什么?
人工智能·深度学习·算法·机器学习·vllm