面试算法之:快速排序

/**
 * @Author: Kerven Han
 * @Date: 
 * @Describe:
 */
public class QuickSort {

     public static void main(String[] args) {

     int[] arr = {2,3,4,1,22,90,45,12,89,12,99,33};
     sort(arr);

         for (int i = 0; i < arr.length; i++) {
             System.out.println(arr[i]);
         }
     }


    public static int partition(int[] arr, int left, int right) {
        int pivotKey = arr[left];

// 这里的两个while循环我们需要明白它们的含义
        //这个是来空值左右两边交替扫描的,
        while(left < right) {
            //这个是来控制左边或者右边的指针移动的
            while(left < right && arr[right] >= pivotKey)
            { right --;}
            arr[left] = arr[right]; //把小的移动到左边
            while(left < right && arr[left] <= pivotKey)
            {  left ++;}
            arr[right] = arr[left]; //把大的移动到右边
        }

// 把两者相遇的点和基准值互换,是把基准值赋给了相遇的那个位置
        arr[left] = pivotKey; //最后把pivot赋值到中间

//返回的是两者相遇的那个点
        return left;
    }


    /**
     * 递归划分子序列
     * @param arr
     * @param left
     * @param right
     */
    public static void quickSort(int[] arr, int left, int right) {
        if(left >= right) {return ;}
        int pivotPos = partition(arr, left, right);
        quickSort(arr, left, pivotPos-1);
        quickSort(arr, pivotPos+1, right);
    }

    public static void sort(int[] arr) {
        if(arr == null || arr.length == 0)
        {return ;}
        quickSort(arr, 0, arr.length-1);
    }



}

也可也参考下别人的:

https://blog.csdn.net/nrsc272420199/article/details/82587933?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.channel_param

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值