快速排序的java实现 要注意的部分都写在注释里面了
public class QuickSortUtil {
public static void main(String[] args) {
int [] B={1,51,54,111,22,44,33,66};
QuickSortUtil.quicksort(B,0,B.length-1);
QuickSortUtil.printarr(B);
}
public static void quicksort(int[] A, int p, int r) {
if (p < r) {
int q = partition(A, p, r);
quicksort(A,p,q-1);
quicksort(A,q+1,r);
}
}
public static int partition(int[] A, int p, int r) {
//核心 将数组中小于A[r]的值的放到前面 大于A[r]的放在后面 循环结束后通过交换使A[r]成为中间的值分割
//两边 然后在quicksort方法中进行递归使p=r即仅包含一个元素的数组 即完成了排序 这里使用i的坐标作为分割两部分的标志
//返回i+1是因为循环结束后交换了A[i+1]与A[r] 把A[r]这个参考数放前面了而已 这里改成i也不影响其正常输出
int x = A[r];
int i = p - 1;
for (int j = p; j < r; j++) {
if (A[j]<x){
i++;
//交换A[i]与A[j]
int temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
//交换A[i+1]与A[r] 返回i+1 i+1的值为指向
int temp=A[i+1];
A[i+1]=A[r];
A[r]=temp;
return i+1;
}
public static void printarr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println("");
}
}