while循环的最大迭代次数

时间:2016-02-12 11:44:14

标签: algorithm data-structures

enter image description here

我的回答是46(不记得我是怎么做到的)。我按降序排列了一个数组,并进行了模拟。

资料来源:GATE-CS 2016问题

2 个答案:

答案 0 :(得分:2)

这是一个分拣设备。

它旋转队列(通过堆栈),直到最小元素被推入堆栈。然后,最小的元素仍然存在。

此过程继续使用剩余的N-1个元素,依此类推。

如果队列最初排序,则循环仅执行N次。

如果队列最初按递减顺序排序,则循环执行2N-1 + 2N-3 + ... + 1 =N²次,这是最坏的情况。

答案 1 :(得分:0)

当我在java中运行这个程序时,我按降序获得256个数组。

    int count=0;
    int[] q = new int[] {16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
    Queue<Integer> queue = new LinkedList<Integer>();
    Stack<Integer> stack = new Stack<Integer>();
    for(int a : q)
    {
        queue.add(a);
    }
    while(!queue.isEmpty())
    {
        if(stack.isEmpty() || stack.peek() <= queue.peek())
        {
            Integer x=queue.remove();   
            stack.push(x);
        }
        else
        {
            Integer x=stack.pop();
            queue.add(x);
        }
        count++;
    }
    System.out.println(count);