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

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

作者: 小小飞的救赎 | 来源:发表于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]+" ");
        }
    }

相关文章

  • 排序

    八大排序算法 一、归并排序 递归及非递归的JAVA实现 二、快速排序 快排算法JAVA实现 三、堆排序 堆排序堆排...

  • 常见排序的java实现

    常见排序的java实现 常见排序java实现 插入排序(二分插入排序) 希尔排序 快速排序(三数中值快排) 冒泡排...

  • 数组排序

    顺序上分为两种:从小到大的排序;从大到小的排序; 方法上分为四种:冒泡排序、快速排序、选择排序、插入排序 (1)冒...

  • JavaScript实现排序算法

    实现了冒泡,选择,插入,快排,希尔,归并 冒泡排序 选择排序 插入排序 快速排序 希尔排序 归并排序

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 常用排序算法

    目录 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归并排序 堆排序 致谢 1. 冒泡排序 C实现,从小到大 ...

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

    实现快排的方法类 测试类

  • php-归并排序、快速排序、堆排序

    归并排序、快速排序、堆排序 时间复杂度 O(nlogn) 归并排序 快速排序(快排) 堆排序

  • OC中的排序算法

    目录 冒泡排序、快速排序、选择排序、插入排序 冒泡 快排 选择 插入

  • 20 ,Arrays.sort排序

    从小到大排序 从大到小排序

网友评论

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

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