快速排序的通俗理解:
1. 快速排序 也需要 进行多趟排序 才能完成
2.每一趟的使命是 给我一个以基准值key为分界,一个所有值都比基准值小的数组 和一个所有值都比基准值大的数组,
3.那这个基准值是谁呢,按理说数组中任意一个数都可以充当这个基准值,但是我们一般都选数组中的第一个元素,情怀问题,哈哈开玩笑,比起来多有调理,多方便
4.那每一趟是怎么完成任务的呢?
(1)从最左边开始 有个游标 i,从最右边开始 设一个游标 j
(2)然后依次交替,j处的值 与 key值比较,比key小的交换位置,然后i处的值再与key比较,比key大的交换位置,一次左右交替
(3).依次左右交替,什么时候,一趟就结束了呢,知道i,j游动到一起,即i=j时,第一趟循环结束
(4).然后以基准值key为分解线,两个数组 再递归调用上面排序的方法。
排序过程如下图所示:
实现代码如下所示:
public class FastSort {
public static void main(String[] args) {
int[] a = {2,5,1,4,94,36,2,2,2,4,4,6,142,2,4,56,32} ;
printArrayBef(a) ;
int start = 0;
int end = a.length -1 ;
fastSort(a, start,end);
printArrayAft(a) ;
}
private static void printArrayAft(int[] a) {
System.out.println("数组排序之后的次序为:");
for(int i = 0; i
= end){
return ;
}
//排序终止的标志是前面和后面的游标重合
while(low != high){
if(flag){
if(a[high]< key){
swap(a, high, low);
flag = false ;
}
else{
high-- ;
}
}else{
if(a[low]>key){
swap(a,high,low) ;
flag = true ;
}
else{
low++ ;
}
}
}
//排一次序
printSorting(a) ;
fastSort(a,high+1,end) ;
fastSort(a, start, low-1);
}
private static void printSorting(int[] a) {
System.out.println("排序中的次序");
for(int i = 0 ;i