快速排序递归实现

分析:快速排序的原理就是递归+分治法,分治法是讲每次选择基准,讲所有元素按基准左右按大小站队,它是不稳定的,因为这是partition过程导致的,假设元素a和基准a重复,但是不能保判断条件<=a时候从后面的元素移动到基准左边。举例如下:
3 1 2 8 3
从右向左找<= 3的数,就是尾数3,它必然会移动到基准3之前,而且最后基准3是要和while条件推出的i下标元素互换,所以一定是相同元素位置变动了。
代码:

package com.study.util;

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] a = {1, 2, 5, 3, 9, 2};
        quickSort(a, 0, a.length - 1);
        System.out.println(Arrays.toString(a));
    }

    private static void quickSort(int[] a, int low, int high) {
        if(low > high) return;

        int i = low;
        int j = high;
        int key = a[low];

        while (i < j) {
            while (i < j && a[j] > key) j--;
            while (i < j && a[i] <= key) i++;
            if (i < j) {
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }

        int temp = a[i];
        a[i] = a[low];
        a[low] = temp;

        quickSort(a, low, i - 1);
        quickSort(a, i + 1, high);
    }
}

注意事项:其实还是递归的基础,记得当时数据结构课上,老师只会讲怎么划分,对递归只字不提,如果数据结构和算法思想不结合起来,有什么意义呢,另外一点是关于变量为什么要保存:
int i = low;
int j = high;
一个是在基准与i下标元素交换时候得是最开始递归那一层的基准,所以需要记忆,另外一作用是:
quickSort(a, low, i - 1);
quickSort(a, i + 1, high);
分治法的参数要和原问题的参数对应。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值