package quick_sort;

/**
 * @author amory
 * */

/*
 * quick_sort 快速排序
 * */

public class Quick_sort {
 /*
  * swap : 交换两个数组中的两个index的值
  * */
 
 public static void swap(int[] arr, int index_x, int index_y){
  int temp = arr[index_x];
  arr[index_x] = arr[index_y];
  arr[index_y] = temp;
 }
 
 public static void quickySort(int[] a, int start, int end){
  int p = 0;
  if(start > end) return;
  while(start <= end){
   p = partition(a,start, end);
   //System.out.println(p);
   quickySort(a,start,p-1);//n/2
   //quickySort(a,p+1,end);
   start = p+1;
  }
 }
 
 /*
  *  partition : 得到数组的分水岭
  * */
 
 public static int partition(int[] arr, int start, int end){
  int parti = 0;
  // step 1 : 赋值(数组中的两个指针来确定分水岭的位置)
  int i = start;
  int j = end;
  
  // step 2 : 从左到右得到比基数大的值,从右到zuo得到比基数小的值,默认升序
  while(i<j){
   while(arr[i] <= arr[start] && i<end){
    i++;
   }
   while(arr[j] > arr[start] && j >= start){
    j--;
   }
   if(i<j){
    swap(arr, i, j);
   }
  }
  
  swap(arr, start, j);
  parti = j;
  return parti;
 }
 
 
 
 public static void main(String[] args) {
  int[] arr = {54, 2, 65, 8, 45, 3, 0, 79};
  for(int i = 0; i<arr.length; ++i){
   System.out.print(arr[i]+" ");
  }
  quickySort(arr, 0, arr.length-1);
  System.out.println();
  for(int i = 0; i<arr.length; ++i){
   
   System.out.print(arr[i]+" ");
  }
 }
}