|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
《算法导论(第三版)》第七章,快速排序
3 [% E' A. W3 Z: d. w' `' h+ N& F: y6 q6 v1 s% _
main
% Y' q! U- i# x) t% a! u S- clear;clc
- A=[2 8 7 1 3 5 6 4]%测试数组
- A=QUICKSORT(A,1,length(A))2 Q7 s0 d$ e3 e" C
6 b$ h7 \/ ~, E4 d! i( e- l* d' x! R; ~
6 _5 L* k8 w" |QUICKSORT
% a( b# z# _7 u% L' c( v; Z- 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 U0 ~8 z. V3 s4 K- V
& y) z6 y8 ^9 l+ w! q/ k j4 N' ]
9 ]5 ] l% Q- e2 f& U9 N& @
/ I; }1 j, f3 e. j. y
PARTITION
0 q b- x; I8 X+ Z' m" ^; b- 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& t3 ^& [1 l7 `/ A
$ }8 Q8 v7 l. e2 o/ {
- f9 b h3 i7 w# ~- b7 P( e
" b+ H# y8 i8 B; Z- m9 Q- x7 M. G& _( M7 q6 L) x/ b1 ~( x6 P C4 }
|
|