快排(快速排序),实现从小到大排序和从大到小排序

实现快排的方法类

package com.hcc.util;

public class QuickSort {
    
    /**
     * 
     * @param arr 存放数据的数组
     * @param left  需要排序的开始下标
     * @param right 需要排序的结束下标
     */
    public static void recursiveSort(int[] arr,int left,int right) {
        if(left < right) {
            //从小到大排序
            //int positionValue = sortingMinToMax(arr, left, right);
            //从大到小排序
            int positionValue = sortingMaxToMin(arr, left, right);
            recursiveSort(arr, 0, positionValue-1);
            int test = positionValue+1;
            recursiveSort(arr, positionValue+1, right);
        }
    }
    /**
     * 真正实现排序的方法
     * @param arr
     * @param left
     * @param right
     */
    private static  int sortingMinToMax(int[] arr,int left,int right) {
        int  baseValue = arr[left];
        while(left < right){
            while(baseValue < arr[right] && left < right){
                right--;
            }
            arr[left] = arr[right];
            while(baseValue > arr[left] && left  arr[right]) {
                right--;
            }
            arr[left] = arr[right];
            while(left < right && baseValue < arr[left]) {
                left++;
            }
            arr[right] = arr[left];
        }
        arr[left] = baseValue;
        return left;
    }
    
}

测试类

    public static void main(String[] args) {
        // 69 65 90 37 92 6 28 54  
        int[] arr = {69,65,90,37,92,6,28,54};
        System.out.println("原始数据:");
        printSortData(arr);
        System.out.println();
        System.out.println("快速排序:");
        quickSortTest(arr);
    }
    public static void quickSortTest(int[] arr) {
        QuickSort.recursiveSort(arr, 0, arr.length-1);
        printSortData(arr);
    }
    
    public static void printSortData(int [] arr) {
        int arrLength = arr.length;
        for(int i = 0;i < arrLength;i++) {
            System.out.print(arr[i]+" ");
        }
    }

你可能感兴趣的:(快排(快速排序),实现从小到大排序和从大到小排序)