【数据结构】【直接排序法】Java代码

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;
//            }
//        }

posted @ 2021-12-29 17:17  萌狼蓝天  阅读(41)  评论(0编辑  收藏  举报