火龙信奥
  • 首页
  • 课程
  • 题库
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

Python 四大排序实现

作者: 作者的头像   huolong , 时间:2026-07-25 18:37:24 , 所有人可见, 阅读  8

Python 四大排序实现(插入排序用索引数组实现) 要求说明: 原数组 a 存储真实数据 索引数组 sy:存下标,只对 sy 排序,不改动原数组 a 实现:冒泡排序、选择排序、索引版插入排序、计数排序

# 1. 冒泡排序(直接排原数组)
def bubble_sort(a):
    arr = a.copy()
    n = len(arr)
    for i in range(n):
        flag = False
        for j in range(n - 1 - i):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
                flag = True
        if not flag:
            break
    return arr

# 2. 选择排序(直接排原数组,min_idx改为k)
def select_sort(a):
    arr = a.copy()
    n = len(arr)
    for i in range(n):
        k = i
        for j in range(i + 1, n):
            if arr[j] < arr[k]:
                k = j
        arr[i], arr[k] = arr[k], arr[i]
    return arr

# 3. 插入排序(索引数组sy实现,key_idx改为k,不修改原数组a)
def insert_sort_index(a):
    n = len(a)
    sy = list(range(n))  # 索引数组sy,初始0,1,2...n-1
    for i in range(1, n):
        # 当前待插入的索引
        k = sy[i]
        j = i - 1
        # 比较原数组a的值,移动索引
        while j >= 0 and a[sy[j]] > a[k]:
            sy[j + 1] = sy[j]
            j -= 1
        sy[j + 1] = k
    # 根据排序后的索引数组生成有序结果
    res = [a[idx] for idx in sy]
    return sy, res

# 4. 计数排序(仅适用于非负整数)
def count_sort(a):
    if not a:
        return []
    max_val = max(a)
    count = [0] * (max_val + 1)
    # 统计频次
    for num in a:
        count[num] += 1
    # 回填结果
    res = []
    for i in range(max_val + 1):
        res.extend([i] * count[i])
    return res


# 测试示例
if __name__ == "__main__":
    a = [5, 2, 9, 1, 5, 6]
    print("原始数组 a =", a)

    # 冒泡排序
    bubble_res = bubble_sort(a)
    print("冒泡排序结果:", bubble_res)

    # 选择排序
    select_res = select_sort(a)
    print("选择排序结果:", select_res)

    # 索引版插入排序
    sy, insert_res = insert_sort_index(a)
    print("插入排序-索引数组 sy =", sy)
    print("插入排序-有序数组 =", insert_res)

    # 计数排序
    count_res = count_sort(a)
    print("计数排序结果:", count_res)

—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com

©2026加盟我们 | 关于我们 | ACM课程 | 常见问题 | 成果墙 | 评测记录 | 浙ICP备2021013995号
在线画图 | OI WIki | 打字练习
火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码