双栈排序练习

来源:互联网 发布:玄机科技工资 知乎 编辑:程序博客网 时间:2024/06/07 20:15

题目:

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

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

/*

解题思路:遍历数组,如果集合为空,则把数组中的元素直接加入到数组中,如果集合末尾的元素大于数组的元素,则直接将数组元素加入集合中,

如果集合末尾的元素大于数组元素,则遍历集合找到小于数组的那个元素,并且在那个元素的后一位添加数组元素

*/


public ArrayList<Integer> twoStacksSort(int[] numbers) {

        ArrayList<Integer> array=new ArrayList<Integer>();
        int index=-1;//用于标记最末尾的那个位置,该位置上的数是最小的
        for(int i=0;i<numbers.length;i++){
            if(array.size()==0||array==null){
                array.add(numbers[i]);
                index++;
            }else if(array.get(index)>numbers[i]){
                array.add(numbers[i]);
                index++;
            }else{
                int j=index;
                while(j>=0){
                    if(array.get(j)>numbers[i]){
                        array.add(j+1,numbers[i]);//这里需要从j+1开始
                        break;
                    }
                   j--;
                }
                if(j<0){
                    array.add(0,numbers[i]);
                }
                index++;//注意这里需要加1
            }
        }//for
        return array;
    }
原创粉丝点击