zoukankan      html  css  js  c++  java
  • 算法--双栈排序

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/fcc2d8d8366f0cb1837cefbd077b21f1.html 


    双栈排序练习题

     
    双栈排序练习
     

    第6节 双栈排序练习题

     

    请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。

    给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。

    测试样例:
    [1,2,3,4,5]
    返回:[5,4,3,2,1]
     
     
     
    1
    import java.util.*;
    2
    
    
    3
    public class TwoStacks {
    4
        public ArrayList<Integer> twoStacksSort(int[] numbers) {
    5
            //sortList中是排好序的,第一元素为栈底元素(最大的元素),最后一个元素为栈顶(最小的元素)
    6
            ArrayList<Integer> sortList = new ArrayList<Integer>();
    7
    
    
    8
            int temp = 0;//临时变量,即当前需要往sortList中加入的元素
    9
            int flag = 0;//记录当前遍历的numbers数组下标的位置
    10
    
    
    11
            for(int i=0; i<numbers.length; i++) {
    12
                flag = i;
    13
                temp = numbers[i];
    14
                if(sortList.size() == 0) {
    15
                    sortList.add(temp);
    16
                }
    17
                else {
    18
                    for(int j=sortList.size() - 1; j>=0; ){
    19
                        //获得当前sortList中最小的元素
    20
                        int minOfsortList = sortList.get(j);
    21
                        if(minOfsortList > temp) {
    22
                            sortList.add(temp);
    23
                            break;
    24
                        }else{//否则当前元素比sortList中最后的元素(即已经排好序的最小元素)大
    25
                            numbers[flag--] = sortList.remove(j); 
    26
                            j--;
    27
                            if(j < 0){//此时sortList中已经没有了元素,直接添加
    28
                                sortList.add(temp);
    29
                                break;
    30
                            }
    31
                        }
    32
                     }
    33
                     //说明从排序好的栈(sortList)到原栈(numbers)发生了移动,把发生移动的再移动回来
    34
                     if(flag != i){
    35
                         for(int k=flag+1; k<=i; k++){
    36
                             sortList.add(numbers[k]);
    37
                         }
    38
                     }
    39
                }
    40
            }
    41
            return sortList;
    42
        }
    43
    }
     
     
    您的代码已保存
    答案正确:恭喜!您提交的程序通过了所有的测试用例
     
     
  • 相关阅读:
    python 获取Excel 的内容
    python 获取文件Excel 的行数与列数
    python 读取Excel 取出表头(列名)
    DRF的视图组件
    Redis
    Git的故事
    DRF的JWT用户认证
    DRF的三大认证组件
    DRF的序列化组件
    DRF的请求响应组件
  • 原文地址:https://www.cnblogs.com/haozhengfei/p/fcc2d8d8366f0cb1837cefbd077b21f1.html
Copyright © 2011-2022 走看看