zoukankan      html  css  js  c++  java
  • java基本算法之快速排序

    快速排序:是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

    /**
    * 快速排序
    * 快速排序采用了分治策略。就是在一个数组中取一个基准数字,把小的数放基准的左边,大的数放基准的右边。
    * 基准左边和右边分别是新的序列。在新的序列中再取一个基准数字,小的放左边,大的放右边。
    * 这个里面用到的递归。我们需要三个参数,一个是数组,另外两个是序列的边界
    * @author shaomch
    */
    public class QuickSort {

    public void quickSort(int[] arr, int left, int right) {
      if (left >= right) {
        return;
      }
      int i = left;
      int j = right;
      int piovt = arr[left];// 基准数:数组的第一个数作为基准数
      while (i != j) {
        // 循环1:从数组右边开始循环,直到找到小于基准数的元素并且放在数组的右边。
        while (i < j && arr[j] >= piovt) {
          j--;
        }
        arr[i] = arr[j];
        // 循环2:从数组左边开始循环,直到找到大于基准数的元素并且放在数组的左边。
        while (i < j && arr[i] <= piovt) {
          i++;
        }
        arr[j] = arr[i];
      }
      arr[i] = piovt;
      quickSort(arr, left, i - 1);
      quickSort(arr, i + 1, right);
    }
    }

  • 相关阅读:
    angular打包出现JavaScript堆内存不足
    antDesign 【NG-ZORRO、Angular】日期选择框时间段nz-range-picker设置默认选择日期及限制日期可选范围
    Echarts 折线图Demo调色12种,可以直接使用~~~
    公司版git完整版
    Linux实例重启服务器后root用户远程连接失败
    Flask+Redis+mq实现高并发
    Dockerfile
    Docker应用部署
    RabbitMQ 实现实现基本通信及订单处理
    centos 7 安装docker的文档参考
  • 原文地址:https://www.cnblogs.com/michaelShao/p/5607742.html
Copyright © 2011-2022 走看看