package sort;
/*
* 快排:
* 1,以数组中的一个数为坐标点,比坐标点大的数放在右边,小的放在坐标。
* 2,不断递归1,直到不能递归。
*/
public class QuickSort {
public static void main(String[] args) {
int[] arr = {5,6,4,1,7,3,2,9};
QuickSort quickSort = new QuickSort();
quickSort.qsort(arr,0,arr.length-1);
for(int i = 0;i<arr.length;i++) {
System.out.print(arr[i]);
}
}
public void qsort(int[] arrs,int begin,int end) {
if(begin>=end||arrs==null)
return;
int position = position(arrs,begin,end);
qsort(arrs,begin,position-1);
qsort(arrs,position+1,end);
}
//重数组的最左边和最右边开始遍历,与坐标点的值进行对比,将数组变成为坐标点的左边比右边小的数组。
public int position(int[] arrs,int begin,int end) {
int first = arrs[begin];
int i = begin;
int j = end;
while(i<j) {
while(first>=arrs[i]&&i<end)
i++;
while(first<arrs[j]&&j>begin)
j--;
if(i<j) {
arrs[i] = arrs[i]+arrs[j];
arrs[j] = arrs[i]-arrs[j];
arrs[i] =arrs[i]-arrs[j];
}
}
//最后移动坐标点
if(j !=begin) {
arrs[begin] = arrs[j];
arrs[j] = first;
}
return j;
}
}