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))
相关推荐
齐鲁大虾9 分钟前
新人编程语言选择指南
javascript·c++·python·c#
Absurd58719 分钟前
Redis如何限制列表最大长度_利用LTRIM指令截断List保留最新记录
jvm·数据库·python
2401_8822737219 分钟前
SQL函数面试题解析_函数性能与设计考点
jvm·数据库·python
knight_9___21 分钟前
RAG面试题5
人工智能·python·agent·rag
a95114164223 分钟前
mysql查询分析中如何快速识别全表扫描_通过EXPLAIN中的type列检查
jvm·数据库·python
Irene199126 分钟前
使用Python进行文件读写的API或方法及其注意事项
python·文件读写
weixin_4249993626 分钟前
mysql如何防止索引被错误使用_mysql查询计划强制约束
jvm·数据库·python
旦莫1 小时前
测试工程师如何用AI生成测试用例?我的提示词模板分享
人工智能·python·测试开发·自动化·测试用例·ai测试
foundbug9991 小时前
基于混合整数规划的电池容量优化 - MATLAB实现
数据结构·算法·matlab
itzixiao1 小时前
L1-047 装睡 (5分)[java][python]
java·开发语言·python