|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
《算法导论(第三版)》第七章,快速排序
1 O3 y, x! V. k/ W7 J/ H# S) D6 @3 @
main
0 T/ ^" C# j$ E7 d$ }' O- clear;clc
- A=[2 8 7 1 3 5 6 4]%测试数组
- A=QUICKSORT(A,1,length(A))
; C- a8 i7 }# H" V6 ^( S& w $ ?" q/ J8 I. ~2 G
# @6 ~- u) u6 n$ i" P! T
* C" p9 e0 K" H/ [" \: h
QUICKSORT
; B& b( H( S# h! T' J1 A- function [A] = QUICKSORT(A,p,r)
- if p<r %还存在未排序的子数组
- [A q]=PARTITION(A,p,r);%以A(r)作为中间值来划分数组,中间值最后保存为A(q)
- A=QUICKSORT(A,p,q-1);%q的前半部分排序
- A=QUICKSORT(A,q+1,r);%q的后半部分排序
- end
- end" A# c/ j+ g0 _5 H6 C3 ]
, ]( P4 |8 p2 ]$ P
# S2 j( l7 r5 b. _
' O4 C; @' ~3 R d: lPARTITION
) T' }/ @' V$ C! s" N- C* t* v1 p- function [A,q] = PARTITION(A,p,r)
- flag=A(r);%A(r)为中间值
- q=p-1;%中间值q。可能末尾为最大值,则不存在分开两侧,所以从起始前一位置分段
- for j=p:r-1%起始值到(最后值的前一位)
- if A(j)<=flag
- q=q+1;
- temp=A(q);
- A(q)=A(j);
- A(j)=temp;
- end
- end
- q=q+1;%中间值的位置
- %交换
- temp=A(q);
- A(q)=A(r);
- A(r)=temp;
- end. E$ H) K, ^: ?1 a
8 ^0 r( s8 X; t" E& l* E0 h
# A+ _# A+ e; C! @$ l* o
& `" [9 k# R B4 ]4 |& D- C. v
( g. s) Q; {6 R/ q' V |
|