python常用的排序算法

目录

[1. 冒泡排序](#1. 冒泡排序)

[2. 插入排序](#2. 插入排序)

[3. 选择排序](#3. 选择排序)

[4. 归并排序](#4. 归并排序)

[5. 快速排序](#5. 快速排序)


1. 冒泡排序

算法描述: 冒泡排序通过重复地遍历要排序的列表,比较相邻的元素并根据需要交换它们的位置来实现排序。

代码示例

python 复制代码
def bubble_sort(arr):
    n = len(arr)
    for i in range(n - 1):
        for j in range(n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr

# 测试
numbers = [64, 34, 25, 12, 22, 11, 90]
print("原始数组:", numbers)
print("排序后的数组:", bubble_sort(numbers))

2. 插入排序

算法描述: 插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

代码示例

python 复制代码
def insertion_sort(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

# 测试
numbers = [64, 34, 25, 12, 22, 11, 90]
print("原始数组:", numbers)
print("排序后的数组:", insertion_sort(numbers))

3. 选择排序

算法描述: 选择排序通过多次遍历列表,每次从未排序的部分中选择最小的元素放到已排序部分的末尾。

代码示例

python 复制代码
def selection_sort(arr):
    for i in range(len(arr)):
        min_idx = i
        for j in range(i + 1, len(arr)):
            if arr[j] < arr[min_idx]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    return arr

# 测试
numbers = [64, 34, 25, 12, 22, 11, 90]
print("原始数组:", numbers)
print("排序后的数组:", selection_sort(numbers))

4. 归并排序

算法描述: 归并排序是一种分治算法,通过递归地将数组分成两半,分别排序后再合并。

代码示例

python 复制代码
def merge_sort(arr):
    if len(arr) <= 1:
        return arr

    mid = len(arr) // 2
    left_half = merge_sort(arr[:mid])
    right_half = merge_sort(arr[mid:])

    return merge(left_half, right_half)

def merge(left, right):
    sorted_arr = []
    i = j = 0

    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            sorted_arr.append(left[i])
            i += 1
        else:
            sorted_arr.append(right[j])
            j += 1

    sorted_arr.extend(left[i:])
    sorted_arr.extend(right[j:])
    return sorted_arr

# 测试
numbers = [64, 34, 25, 12, 22, 11, 90]
print("原始数组:", numbers)
print("排序后的数组:", merge_sort(numbers))

5. 快速排序

算法描述: 快速排序也是一种分治算法,通过选择一个基准元素,将数组分成两部分,左边部分小于基准,右边部分大于基准,然后递归地对这两部分进行排序。

代码示例

python 复制代码
def quick_sort(arr):
    if len(arr) <= 1:
        return arr

    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 quick_sort(left) + middle + quick_sort(right)

# 测试
numbers = [64, 34, 25, 12, 22, 11, 90]
print("原始数组:", numbers)
print("排序后的数组:", quick_sort(numbers))
相关推荐
酷飞飞4 小时前
Python网络与多任务编程:TCP/UDP实战指南
网络·python·tcp/ip
风中的微尘5 小时前
39.网络流入门
开发语言·网络·c++·算法
数字化顾问5 小时前
Python:OpenCV 教程——从传统视觉到深度学习:YOLOv8 与 OpenCV DNN 模块协同实现工业缺陷检测
python
西红柿维生素6 小时前
JVM相关总结
java·jvm·算法
学生信的大叔6 小时前
【Python自动化】Ubuntu24.04配置Selenium并测试
python·selenium·自动化
诗句藏于尽头7 小时前
Django模型与数据库表映射的两种方式
数据库·python·django
智数研析社7 小时前
9120 部 TMDb 高分电影数据集 | 7 列全维度指标 (评分 / 热度 / 剧情)+API 权威源 | 电影趋势分析 / 推荐系统 / NLP 建模用
大数据·人工智能·python·深度学习·数据分析·数据集·数据清洗
扯淡的闲人7 小时前
多语言编码Agent解决方案(5)-IntelliJ插件实现
开发语言·python
moxiaoran57537 小时前
Flask学习笔记(一)
后端·python·flask
ChillJavaGuy7 小时前
常见限流算法详解与对比
java·算法·限流算法