ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

堆排序

2022-08-25 17:31:42  阅读:213  来源: 互联网

标签:arr target int 堆排序 source 顶栈 Stack


package com.lianzhu.filemanage.utils;

import java.util.Stack;

/**
 * 栈排序
 * @description:栈的特性:先进后出  如空数组【】
 * @step1:有一串数字 4,8,7,9,2,6
 * 依次按照顺序 4 8 7  9  2  6放入【】然后就是这种【629784】
 * 然后取出来的时候就是6  2  9  7   8   4
 * 可以理解为一个桶,先进去的放在最里面,最后放进去的在最外边,这样取出来的时候就先取
 * 最外边的,最后取最先面的
 */
public class StackSort {



    private static void twoStackSort(int[] arr){
        //source原栈
        Stack<Integer> source = new Stack<Integer>();
        for(int i = 0; i < arr.length; i++){
            source.push(arr[i]);
        }
        //target目标栈
        Stack<Integer> target = twoStackSort(source);
        while(!target.isEmpty()){
            System.out.println(target.pop());
        }
    }

    /**
     * step1:原栈source不为空,目标栈source为空,把原栈target顶栈元素放入目标栈
     * step2:原栈source不为空,目标栈target不为空,把source顶栈元素与target进行比较
     *        1.0循环判断target不为空且顶栈元素大于source顶栈元素v,
     *        2.0把target大于source顶栈元素取出放入source
     *        3.0把v放入target
     * step3: 循环step1与step2
     * 特点:改变target v的判断逻辑可以把输出改为升序,目前输出是降序
     * @param source
     * @return
     */
    private static Stack<Integer> twoStackSort(Stack<Integer> source) {
        Stack<Integer> target = new Stack<Integer>();
        while(!source.isEmpty()){
            if(target.isEmpty()){
                target.push(source.pop());
            }else{
                int v = source.pop();
                if(target.peek() <= v){
                    target.push(v);
                }else{
                    while(!target.isEmpty() && target.peek() > v){
                        source.push(target.pop());
                    }
                    target.push(v);
                }
            }
        }
        return target;
    }

    public static void main(String[] args) {
        int arr[]=new  int []{98,5,4,61,3,2,57,4,65};
        twoStackSort(arr);
    }
}

 

标签:arr,target,int,堆排序,source,顶栈,Stack
来源: https://www.cnblogs.com/wangbiaohistory/p/16625012.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有