package com.algorithm;
public class QuickSort {
public static void main(String []args){
int []a={4,4,5,7,1,8,3,9,11,6};
quickSort(a,0,a.length-1);
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
private static void quickSort(int[] a, int i, int j) {
// TODO 自动生成的方法存根
int mid=0;
if(i<j){
//递归地找分割点,排左边,排右边
mid=findP(a,i,j);
quickSort(a,i,mid-1);
quickSort(a,mid+1,j);
}
}
private static int findP(int[] a, int i, int j){
int m=a[i];
while(i<j){
while(i<j&&a[j]>m)j--;
a[i]=a[j];
while(i<j&&a[i]<=m)i++;
a[j]=a[i];
}
a[i]=m;
return i;
}
static int partition(int[] ar,int i,int l) {
int res=0,temp=ar[i];
List<Integer> list=new LinkedList<>();
for(int k=i;k<=l;k++)
list.add(ar[k]);
for(int k=i+1;k<=l;k++){
if(ar[k]<temp){
list.remove((Integer)ar[k]);
list.add(res,ar[k]);
res++;
}
}
for(int k=i;k<=l;k++)
ar[k]=list.get(k-i);
return res+i;
}}
//为了得到相对顺序不变的序列,eg:5 8 1 3 7 9 2->1 3 2 5 8 7 9