快速排序:
快速排序的关键在于partition函数,partition分片确定基准元素的最终位置,然后对基准元素的左右分别进行快排。
public void quickSort(int[] a){
if(a==null||a.length()<2) return;
return quickSort(a,0,a.length()-1);
}
public void quickSort(int[] a,int lo,in hi){
if(lo>=hi) return;
int i = partition(a,0,a.length()-1);
quickSort(a,lo,i-1);
quickSort(a,i+1,hi);
}
public int partition(int[] a,int lo,int hi){
int i = lo,j = hi,v = a[lo];//左右扫描指针,切分元素
while(i<j){
while(i<j&&a[j]>v) j--;
while(i<j&&a[i]<v) i++;
if(i>=j) break;
swap(a,i,j);
}
swap(a,lo,j); //将v = a[j]插入到正确的位置
return j;
}
public void swap(int[] a,int i,int j){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}