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))
相关推荐
python-码博士2 小时前
关于sklearn中StandardScaler的使用方式
人工智能·python·sklearn
江公望2 小时前
PyWebview浅谈
python
ULTRA??2 小时前
各种排序算法时间复杂度分析和实现和优势
c++·python·算法·排序算法
0思必得02 小时前
[Web自动化] HTML5常见新增标签
前端·python·自动化·html5·web自动化
闲人编程2 小时前
JWT认证与OAuth2集成
python·认证·jwt·签名·头部·负载·codecapsule
骚戴2 小时前
DeepSeek V3 & Llama 3 推理避坑指南:自建 vLLM 集群 vs API 网关架构深度对比
java·人工智能·python·大模型·api·vllm
sprintzer3 小时前
12.06-12.15力扣分治法刷题
算法·leetcode
月明长歌3 小时前
【码道初阶】【牛客BM30】二叉搜索树与双向链表:java中以引用代指针操作的艺术与陷阱
java·数据结构·算法·leetcode·二叉树·笔试·字节跳动
hoiii1873 小时前
使用RPCA算法对图像进行稀疏低秩分解
人工智能·算法
yuuki2332333 小时前
【C++】内存管理
java·c++·算法