快速排序实现(java)

快速排序实现(java)

不废话了,快速排序算法原理就不写了,直接上代码:

package com.sort;

public class QuickSort {
    public static void main(String[] args) {
        Integer[] array = new Integer[]{2, 4, 3, 1, 7, 9, 7, 6, 8, 5, 1, 21, 32, 54, 65, 43, 32, 99};
        int low = 0;
        int high = array.length;
        quickSort(array, 0, high - 1);
    }

    /**
     * 快速排序递归调用,每一次选取基准数进行低位和高位部分分别排序
     *
     * @param array 数组
     * @param low   低位索引
     * @param high  高位索引
     */
    public static void quickSort(Integer[] array, int low, int high) {
        //基准数
        int pos = array[low];
        if (low < high) {
            //排序算法 返回高低位的分割点,用于分治每次排序返回的结果,进行高低位的区分
            int temp = sorAlgorithm(array, low, high, pos);
            display(array);
            //低位部分排序
            quickSort(array, low, temp - 1);
            //高位部分排序
            quickSort(array, temp + 1, high);
        } else {
            return;
        }

    }

    /**
     * 显示数组
     *
     * @param array 输出数组
     */
    private static void display(Integer[] array) {
        if (array == null) {
            return;
        }
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + ",");
        }
        System.out.println();
    }

    /**
     * 交换两个数位置
     *
     * @param array 数组
     * @param l     交换数字索引
     * @param h     交换数字索引
     */
    private static void swap(Integer[] array, int l, int h) {
        int temp = array[l];
        array[l] = array[h];
        array[h] = temp;
    }

    /**
     * 排序算法,将数组中数字以基准数为标准分为两部分
     *
     * @param array 待排序数组
     * @param low   低位索引
     * @param high  高位索引
     * @param pos   基准数
     */
    public static Integer sorAlgorithm(Integer[] array, int low, int high, int pos) {
        //找出高位比基准数小的数字
        while (low < high) {
            while (low < high && array[high] >= pos) {
                high--;
            }
            swap(array, low, high);
            //找出比低位大的数字
            while (low < high && array[low] <= pos) {
                low++;
            }
            swap(array, low, high);
        }
        //返回比较的分割索引,也就是分割下次递归中的高位低位的标记
        return low;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值