zoukankan      html  css  js  c++  java
  • 快速排序的递归非递归实习java

    package com.edu.hpu.sort.swap.quick;
    
    import java.util.Arrays;
    import java.util.LinkedList;
    
    import com.edu.hpu.sort.Sort;
    
    public class QuickSort extends Sort {
        
        @Override
        public int[] doSort(int[] arr) {
            return quickSort2(arr, 0, arr.length - 1);
        }
        
        @SuppressWarnings("unused")
        private int [] quickSort(int [] arr, int p, int r){
            // 递归求解
            if(p < r){
                int q = partition(arr, p, r);
                quickSort(arr, p, q - 1);
                quickSort(arr, q + 1, r);
            }
            return arr;
        }
        private int [] quickSort2(int [] arr, int p, int r){
            // 非递归求解
            if(p < r){
                LinkedList<Integer> stack = new LinkedList<Integer>();
                int q = partition(arr, p, r);
                if(p < q - 1){
                    stack.push(q - 1);
                    stack.push(p);
                }
                if(r > q + 1){
                    stack.push(r);
                    stack.push(q + 1);
                }
                while(!stack.isEmpty()){
                    int l = stack.pop();
                    int h = stack.pop();
                    int mid = partition(arr, l, h);
                    if(l < mid - 1){
                        stack.push(mid - 1);
                        stack.push(l);
                    }
                    if(h > mid + 1){
                        stack.push(h);
                        stack.push(mid + 1);
                    }
                }
            }
            return arr;
        }
        
        private int partition(int []arr, int p, int r){
            int aix = arr[r];
            int i = p -1;
            for(int j = p; j < r; j++){
                if(arr[j] < aix){
                    i++;
                    swap(arr, i, j);
                }
            }
            swap(arr, i + 1, r);
            System.out.println(Arrays.toString(arr));
            return i + 1;
        }
        public static void main(String[] args) {
            QuickSort quickSort = new QuickSort();
            quickSort.printOrder(new int []{4, 1, 3, 2, 16, 9, 100, 194, 8, 7});
        }
    }
  • 相关阅读:
    基于NodeJS的全栈式开发
    Android 反编译apk 详解
    AngularJS 中文资料+工具+库+Demo 大搜集
    Mongodb集群搭建的三种方式
    Ubuntu下解决bash 没有那个文件或目录的方法
    ubuntu12.04 安装配置jdk1.7
    CentOS怎样查看系统信息
    Ubuntu 安装 Redis
    Redis快速入门
    js去掉双引号
  • 原文地址:https://www.cnblogs.com/xinyuyu/p/4788160.html
Copyright © 2011-2022 走看看