快慢指针java实现快速排序
今天学习数据结构快速排序时发现网上有很多种快速排序的方法,于是我选择了算法导论上面一种比较标准的快慢指针的方法实现了.
import java.util.Arrays;
public class QuickSort {
public static void quickSort(int []A,int low,int high){
if(low>=high) return; //如果一直拆分到只有一位就返回
int pivot = A[high]; //将最右边的数字作为基准值
int i=low-1; // 慢指针i的作用是标记基准值最后应该在的位置
for(int j=low;j<high;j++){ //由快指针j一直比较到基准值的前一位
if(A[j]<pivot){ //如果该值小于基准值,那么就将i++,将该值,放到i的前面,也就是基准值位置的左面
i++;
int tmp = A[j]; A[j]=A[i]; A[i]=tmp; //交换位置,将小的数放在左面
}
}
int tmp = A[i+1]; A[i+1]=A[high]; A[high]=tmp; // 最后将基准值放到合适的位置,也就是i的前面一位
quickSort(A,low,i); //递归的排列左边的部分
quickSort(A,i+2,high); //递归的排列右边的部分
}
public static void main(String[] args) {
int []A = new int[]{3,2,5,6,7,9,5};
quickSort(A,0,A.length-1);
System.out.println(Arrays.toString(A));
}
}