一.什么叫快速排序?
通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過(guò)程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。
二.排序步驟:
對(duì)下列數(shù)組進(jìn)行排序:(22,36,4,51,36,8,44,5,62,14,5,6,32,12)
1.)找出一個(gè)元素作為基準(zhǔn)(理論上可以隨便找一個(gè))定義兩個(gè)指針begn和end.
int x=begn;
int y=end;
int s=a[begn];
找第一個(gè)元素作為基準(zhǔn)
2.)排序?qū)崿F(xiàn):
1. 以 22 位基準(zhǔn) ;
2. 在begn位置開(kāi)始往上找大于等于22的數(shù)字;
3.在end處開(kāi)始往下找小于等于22的數(shù)字;
4.找到后交換位置
while (a[x]<s){
x++;
}
while(a[y]>s){
y--;
}
if(y>=x){
int tem=a[x];
a[x]=a[y];
a[y]=tem;
x++;
y--;
}
第一趟執(zhí)行結(jié)果:
第一趟執(zhí)行結(jié)果
3.)最后重復(fù)以上操作調(diào)用遞歸算法:
if(begn<y){
Qucli(a,begn,y);
}
if(end>x){
Qucli(a,x,end);
}
三.完整程序:
public class QuickSort {
//快速排序
public static void Qucli(int []a,int begn,int end){
int x=begn;
int y=end;
int s=a[begn];
while(y>=x){
while (a[x]<s){
x++;
}
while(a[y]>s){
y--;
}
if(y>=x){
int tem=a[x];
a[x]=a[y];
a[y]=tem;
x++;
y--;
}
if(begn<y){
Qucli(a,begn,y);
}
if(end>x){
Qucli(a,x,end);
}
}
}
public static void main(String[] args) {
int a[]={22,36,4,51,36,8,44,5,62,14,5,6,32,12};
Qucli(a,0,a.length-1);
for(int ss:a){
System.out.print(ss+" ");
}
}
}
結(jié)果展示:
快速排序