数据结构与算法 代码整理:常见的交换排序法

冒泡排序

1 # 冒泡排序
2 def bubblesort(A):
3     n = len(A)
4     for i in range(n,1,-1): # i = n, n-1, n-2, ..., 2
5         # 截取 A 的前i个元素进行冒泡
6         for j in range(i-1):
7             if A[j] < A[j+1]:   # 依次比较两个相邻的数
8                 A[j], A[j+1] = A[j+1], A[j]     #交换两个相邻的数

 

快速排序排序

复制代码
 1 def quicksort_rec(A,lft=None,rgt=None):
 2     
 3     if lft == None or rgt == None:
 4         lft, rgt = 0, len(A)-1
 5     if lft >= rgt:   
 6         return
 7 
 8     i = lft                                 # 序列最左边的哨兵
 9     j = rgt                                 # 序列最右边的哨兵
10     base = lft                              # 基准数的索引
11     while i != j:               
12         while A[j] >= A[base] and i < j:    # 先从右往左找
13             j -= 1
14         while A[i] <= A[base] and i < j:
15             i += 1
16         if i < j:                           # 没有相遇:交换
17             A[i], A[j] = A[j], A[i]
18     
19     A[base], A[i] = A[i], A[base]           # 基准数归位, 索引 i 为序列正中
20     quicksort_rec(A, lft, i-1)              # 递归处理左边序列
21     quicksort_rec(A, i+1, rgt)              # 递归处理右边序列
复制代码

 

posted on   hanahimi  阅读(328)  评论(0编辑  收藏  举报

编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用

导航

< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示