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});
        }
    }
  • 相关阅读:
    ANSYS文件读写
    ANSYS导出图片
    由面网格拉伸为体网格
    ANSYS由结点生成单元
    photoshop做gif图片的问题
    matlab输出没有白边的图片
    关于ANSYS绘图显示结果范围的问题
    ansys的建模基于的坐标系问题
    ANSYS分析轴对称问题
    ANSYS取消坐标轴显示,关闭局部坐标系
  • 原文地址:https://www.cnblogs.com/xinyuyu/p/4788160.html
Copyright © 2011-2022 走看看