public class 直接排序 { /** * 直接排序法 仅排序1轮 * @param arr 数组 * @param ji 基准索引,填写几,就以谁为基准进行一次划分 */ public static void qsort(int[] arr, int ji) { int l=0; int r=arr.length-1; while(l<r){ while(l<r&&arr[r]>arr[ji]) r--; if(l<r) { int temp=arr[r]; arr[r]=arr[ji]; arr[ji]=temp; ji=r; } while(l<r&&arr[l]<arr[ji]) l++; if(l<r) { int temp=arr[l]; arr[l]=arr[ji]; arr[ji]=temp; ji=l; } printarr(arr); } } /** * 直接排序法 多轮划分 * @param arr 数组 * @param lun 基准索引,填写0,则从0开始,以其为基准,进行划分 */ public static void qsortAll(int[] arr, int lun) { if((arr.length-1)==lun) return; int ji=lun; int l=0; int r=arr.length-1; while(l<r){ while(l<r&&arr[r]>arr[ji]) r--; if(l<r) { int temp=arr[r]; arr[r]=arr[ji]; arr[ji]=temp; ji=r; } while(l<r&&arr[l]<arr[ji]) l++; if(l<r) { int temp=arr[l]; arr[l]=arr[ji]; arr[ji]=temp; ji=l; } } printarr(arr); qsortAll(arr,++lun); } /** * 用来输出数组 * @param arr 要输出的数组 */ public static void printarr(int[] arr){ for (int i:arr) { System.out.print(i+"\t"); } System.out.println(); } /** * 主方法 * @param args */ public static void main(String[] args) { int[] arr = new int[]{410,10,80,9,70,4}; // int[] arr = new int[]{46,79,56,38,40,84}; qsortAll(arr, 0); for (int i:arr) { System.out.print(i+"\t"); } } } // for(r=arr.length-1;r>0;r--){ // if(arr[r]<arr[ji]){ // int temp = arr[r]; // arr[r]=arr[ji]; // arr[ji]=temp; // ji=r; // printarr(arr); // break; // } // } // for(l=0;l<arr.length;l++){ // if(arr[l]>arr[ji]){ // int temp = arr[l]; // arr[l]=arr[ji]; // arr[ji]=temp; // ji=l; // printarr(arr); // break; // } // }