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))
相关推荐
逻辑留白陈13 分钟前
Adaboost进阶:与主流集成算法对比+工业级案例+未来方向
算法
Learn Beyond Limits22 分钟前
Mean Normalization|均值归一化
人工智能·神经网络·算法·机器学习·均值算法·ai·吴恩达
摩羯座-1856903059433 分钟前
爬坑 10 年!京东店铺全量商品接口实战开发:从分页优化、SKU 关联到数据完整性闭环
linux·网络·数据库·windows·爬虫·python
ACERT33338 分钟前
5.吴恩达机器学习—神经网络的基本使用
人工智能·python·神经网络·机器学习
天选之女wow44 分钟前
【代码随想录算法训练营——Day28】贪心算法——134.加油站、135.分发糖果、860.柠檬水找零、406.根据身高重建队列
算法·leetcode·贪心算法
Gohldg44 分钟前
C++算法·贪心例题讲解
c++·数学·算法·贪心算法
韩立学长1 小时前
【开题答辩实录分享】以《基于python的奶茶店分布数据分析与可视化》为例进行答辩实录分享
开发语言·python·数据分析
远远远远子1 小时前
类与对象 --1
开发语言·c++·算法
Aaplloo1 小时前
【无标题】
人工智能·算法·机器学习
西望云天1 小时前
The 2024 ICPC Asia Nanjing Regional Contest(2024南京区域赛EJKBG)
数据结构·算法·icpc