zoukankan      html  css  js  c++  java
  • 快排的非递归算法和最大子串乘积

             快排的原理是,让一个数作为中间值A,使得左边的数都小于(大于)等于A,右边的数都大于(小于)A。

             

    1 public static void quickSort(Integer[] arrayList,int begin,int end){
    2         if(begin>=end)
    3             return;
    4         int par=paration3(arrayList, begin, end);
    5         if(begin<par-1)
    6             quickSort(arrayList, begin, par-1);
    7         if (par<end) 
    8             quickSort(arrayList, par+1, end);
    9     }
    public static int paration(Integer[] arrayList,int begin,int end){
            int temp=arrayList[begin];
            while (begin<end) {
                while (begin<end&&arrayList[end]>temp) {
                    end--;
                }
                if (begin<end) {
                    arrayList[begin]=arrayList[end];
                    begin++;
                }
                while (begin<end&&arrayList[begin]<temp) {
                    begin++;
                }
                if (begin<end) {
                    arrayList[end]=arrayList[begin];
                    end--;
                }
            }
            arrayList[begin]=temp;
            return begin;
        }

           一般来说,递归算法都可以用非递归来实现,添加一个栈, 保存相关信息即可。快速排序的非递归算法亦是如此,每次保存下下次需要排序的。

         

    public static void quickSort2(Integer[] arrayList,int begin,int end){
            int par=paration3(arrayList, begin, end);
            Stack<Integer> stack=new Stack<Integer>();
            if(begin>par-1){
                stack.push(begin);
                stack.push(par-1);
            }
            if(par+1<end){
                stack.push(par+1);
                stack.push(end);
            }
            while (!stack.empty()) {
                end=stack.pop();
                begin=stack.pop();
                par=paration3(arrayList, begin, end);
                if(begin<par-1){
                    stack.push(begin);
                    stack.push(par-1);
                }
                if(par+1<end){
                    stack.push(par+1);
                    stack.push(end);
                }
            }
        }

              

  • 相关阅读:
    61组第二次团队作业
    饮水机电路图工作原理及电路图分析
    七种基础模拟电路的用法
    C语言判断一个数是奇数还是偶数
    F28335 UART串口配置及数据发送
    F28335 SPI配置及收发数据
    电容的九大功能
    查询接口---flask+python+mysql
    python参数传递
    java基础
  • 原文地址:https://www.cnblogs.com/xiaoyi115/p/3992735.html
Copyright © 2011-2022 走看看