JAVA排序:快速排序算法

Java实现快速排序算法

快速排序算法体现了—分治思想:将大问题划分为多个相同独立的小问题,每个小问题的解决合在一起解决了大问题

实现快速排序的思想:

{2,4,1,0,3,5}是目标数组
{0,1,2,3,4,5}是结果数组

  1. 选取中心轴pivot(中心轴的值用于比较,坐标用于返回);
  2. 中心轴左边 <= 中心轴值,中心轴右边 >= 中心轴值(==因为指针也要移动,否则跳不出循环)
  3. 返回中心轴坐标(此时中心轴100%是结果数组的位置
  4. 基于中心轴坐标(position)递归中心轴坐标中心轴左(0, position-1)右(position+1 , high )两边 (重复123步骤,直到递归结束)

快排之前:
选取pivot
确定left 和 right指针
在这里插入图片描述
快排结束:
left 和 right指针相遇就是中心轴pivo的新位置
在这里插入图片描述
快排到此结束第一轮,可以发现中心轴值最后移动到结果数组位置
递归左右两边,完成排序

最后是java快速排序代码模板:

 int partition(int[] array, int low, int high) {
        //选定中心轴pivot
        //此处选取最左边low
        //作为中心轴
        if (low == array.length){
            return low;
        }
        int pivot = array[low];
        //i 和 j 相等时退出循环,交换pivot位置
        int i = low;
        int j = high;
        while (i < j) {
            //中心轴左边必须 小于 中心轴
            while (i < j && compare(array[j],pivot)) j--;
            //中心轴右边必须大于中心轴
            while (i < j && compare(array[i], pivot)) i++;
            swap(array, i, j);
        }
        //此时i==j 返回任意一个都是新的中心轴位置
        swap(array, low, i);
        return i;
    }

    public static void quickSort(int[] array, int low, int high) {
        //获取划分子数组的位置
        if (low < high){
            //中心轴坐标完成排序
            int position = partition(array, low, high);
            //中心轴左右继续排序
            quickSort(array,position+1,high);
            quickSort(array,low,position-1);
        }

    }
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值