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

冒泡排序

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 2015-08-12 15:53  hanahimi  阅读(322)  评论(0编辑  收藏  举报

导航