美文网首页
快排(快速排序),实现从小到大排序和从大到小排序

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

作者: 小小飞的救赎 | 来源:发表于2018-12-13 15:55 被阅读0次

    实现快排的方法类

    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 <right) {
                    left++;
                }
                arr[right] = arr[left];
            }
            arr[left] = arr[right] = baseValue;
            return left;
        }
        
        
        @SuppressWarnings("unused")
        private static int sortingMaxToMin(int[] arr,int left,int right) {
            int baseValue = arr[left];
            while(left < right) {
                while(left < right && baseValue > 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]+" ");
            }
        }
    

    相关文章

      网友评论

          本文标题:快排(快速排序),实现从小到大排序和从大到小排序

          本文链接:https://www.haomeiwen.com/subject/crkbhqtx.html