package offer;
import java.util.PrimitiveIterator;
/**
* 快速排序
* 原理:不断寻找一个序列的中点,然后对中点左右的序列递归的进行排序,直至全部序列排序完成,使用了分治的思想。
* 要点:递归、分治
*/
public class QuickSort {
private static void quickSort(int[] a){
quickSort(a,0,a.length - 1);
}
private static void quickSort(int[] a , int left,int right){
if (left < right){
int pivot = a[left];
int lo = left;
int hi = right;
while (lo < hi){
while (lo < hi && a[hi] >= pivot){
hi--;
}
//a[lo]是pivot的值的初始位置,lo位置值变化,则pivot丢失
//更新为后半段数据中倒数第一个大于pivot的值
a[lo]=a[hi];
while (lo < hi && a[lo] <= pivot){
lo++;
}
//lo更新为第一个大于piovt的值
//hi索引位置的值更新未前半段第一个大于piovt的值
a[hi] = a[lo];
}
//最后更新为lo > hi
//lo更新为pivot的值
a[lo] = pivot;
quickSort(a,left,lo-1);
quickSort(a,lo+1,right);
}
}
public static void printArray(int[] a){
for (int i : a){
System.out.print(i + " ");
}
}
public static void main(String[] args){
/**
* 3 5 1 4 2
* 2 5 1 4 2
* 2 5 1 4 5
* 2 1 1 4 5
* 2 1 3 4 5
*/
int[] a = {3,5,1,4,2};
quickSort(a);
printArray(a);
}
}