zoukankan      html  css  js  c++  java
  • 常见算法之18---快速排序

    快速排序基本思想
    选定一个中枢元素,以其为基准点,将小于它的数放在其前面,大于其的数放在后面,把中枢元素放在最终合适的位置。然后再对左右两边分别递归。

     

    快速排序的基本步骤:
    1 初始时,以第一个元素作为中枢元素。低指针指向第一个元素,高指针指向最后一个元素。
    2 当中枢元素在低指针时,从高指针开始向前查询第一个小于中枢元素的数,并交换这个数和中枢元素。将中枢元素移到高指针的位置。
    3 当中枢元素在高指针时,处理方式同上相反。
    4 当高低指针指向同一个位置时,说明完成一轮排序,此时中枢元素处在了最终的位置上。
    5 之后,再对中枢元素两边进行相同操作。

     

    基本代码:

    public static void quickSort(int[] array, int start, int end) {
    if (start < end) {
      //上述1
      int low = start;
      int high = end;
      int index = start;
      boolean highFlag = true;

      //上述4
      while (low < high) {
        //上述2
        if (highFlag) {

          while (array[index] <= array[high] && low < high) {

                             //low < high判断是有必要的,不加的话,也可能造成越界异常。
            high--;
          }

        int temp = array[index];
        array[index] = array[high];
        array[high] = temp;

        index = high;
        highFlag = false;
        }

        //上述3
        else {
          while (array[index] >= array[low] && low < high) {

            low++;
          }

          int temp = array[index];
          array[index] = array[low];
          array[low] = temp;

          index = low;
          highFlag = true;
         }
      }
      //上述5
      quickSort(array, start, low - 1);
      quickSort(array, low + 1, end);
      }
    }

  • 相关阅读:
    Java SE 基础之接口回顾
    读书杂谈-《架构探险:从零开始写Java Web框架》
    Java Se之类加载问题思考
    struts2 下载记录
    《重构改善既有代码的设计》笔记之序
    Luence简单实现2
    RabbitMQ学习(1):安装
    jquery插件dataTables添加序号列
    父<IFRAME>获取子页属性以及子页中<IFRAME>的方法
    类的约束 异常处理 自定义异常 MD5 日志信息处理
  • 原文地址:https://www.cnblogs.com/xiaoChongUp/p/3388921.html
Copyright © 2011-2022 走看看