快速排序算法——两种写法
来源:互联网 发布:数据之巅 电子书 编辑:程序博客网 时间:2024/05/16 15:12
写法一 伪代码:
快速排序算法:Quicksoft(A, p, r)
p,r分别为数组A的首元素和尾元素的下标
主程序直接调用Quicksort(A, 1, n)即可
输入:数组A[p..r],1≤p≤r≤n
输出:从A[p]到A[r]按照递增顺序排好序的数组A
if p<rthen q←Partition(A, p, q-1) //划分数组,找到首元素A[p]在排好序后的位置q A[p]←→A[q] Quicksort(A, p, q-1) Quicksort(A,q+1,r)
Partition(A, p, r)
输入:数组A[p,r]
数组:j, A的首元素在排好序的数组中的位置
x←A[p]i←pj←r+1while true do repeat j←j-1 util A[j]≤x repeat i←i+1 until A[i]>x if i < j then A[i]←→A[j] else return j
Python实现代码:
def quicksort(ar, p, r): if p < r: q = partition(ar, p, r) arr[p], arr[q] = ar[q], arr[p] quicksort(ar, p, q - 1) quicksort(ar, q + 1, r) else: returndef partition(ar, p, r): x = ar[p] i = p j = r while 1: while ar[j] > x: j = j - 1 while ar[i] <= x: i = i + 1 if i < j: ar[i], ar[j] = ar[j], ar[i] else: return jarr = [1, 4, 7, 1, 5, 5, 3, 85, 34, 75, 23, 75, 2, 0]print "initial array:\n", arrquicksort(arr, 0, len(arr) - 1)print "result array:\n", arr
写法二 伪代码:
QUICKSORT(A, p, r)
if p<r q = PARTITION(A,p,r) QUCIKSORT(A,p,q-1) QUICKSORT(A,q+1,r)
PARTITION(A, p, r)
x = A[r]i = p-1for j=p to r-1 if A[j]≤x i = i + 1 exchange A[i] with A[j]exchange A[i+1] with A[r]return i+1
Python实现代码
def quicksort(ar, p, r): if p < r: q = partition(ar, p, r) quicksort(ar, p, q - 1) quicksort(ar, q + 1, r) else: returndef partition(ar, p, r): x = ar[r] i = p-1 for j in range(p, r): if ar[j] <= x: i = i + 1 ar[i], ar[j] = ar[j], ar[i] ar[i+1], ar[r] = ar[r], ar[i+1] print ar return i+1arr = [2, 8, 7, 1, 3, 5, 6, 4]print "initial array:\n", arrprint "***************************"quicksort(arr, 0, len(arr) - 1)print "***************************"print "result array:\n", arr
阅读全文
0 0
- 快速排序算法——两种写法
- [算法] 两种快速排序的while写法
- 快速排序partition过程常见的两种写法
- js实现两种实用的排序算法——冒泡、快速排序
- 两种快速排序算法比较
- 快速排序算法的两种实现
- 快速排序partition过程常见的两种写法+快速排序非递归实现
- 快速排序partition过程常见的两种写法+快速排序非递归实现
- 算法笔记 之 快速排序的几种写法
- 排序算法—快速排序
- 排序算法—快速排序
- 算法:快速排序(快速排序其实有很多种不同写法和代码形式)
- 两种快速排序
- 探讨两种快速排序写法与堆溢出的关系
- 快速排序的两种写法(站在巨人的肩膀上加深理解)
- java快速排序算法(数组和list两种方式)
- 快速排序(快排)算法的C++两种实现
- python实现快速排序算法(两种不同实现方式)
- 为什么不能打断正在工作的程序员?
- 程序员相关笑话,你看懂几个?
- 我是程序猿,没有秃头,还有女朋友
- C/C++ VS2012及以上添加 Snippet,自定义快捷输入注释
- git初级入门
- 快速排序算法——两种写法
- 第九章0.3
- linux学习第二十八篇:监控io性能,free命令,ps命令,查看网络状态,linux下抓包
- 其它:判断邻域格网的连续性
- python练习题5 寻找序列中的motif
- FCN
- 用电路做加法
- CS231n(1):Python Numpy教程
- 树的子结构