此插入到优先级队列方法中的说明

时间:2016-09-16 22:47:05

标签: java queue priority-queue

请有人请解释此方法为我插入优先级队列。当我说列表是[1,2,3,4,5,6,8,9]并且你插入7时我会发生什么。虽然我没有看到它如何正确插入10(或任何其他数字)大于9)。从我在当前实现中看到的情况来看,如果数字大于队列中的最后一个数字,那么它将被不正确地插入。它是否正确?或者我错过了什么?

 public void insert(double item) // insert item
 {
        int j;
        if(nItems==0) // if no items,
            queArray[nItems++] = item; // insert at 0
        else // if any items
        {
            for(j=nItems-1; j>=0; j--) // start at end,
            {
                if( item > queArray[j] ) // if new item larger, 
                    queArray[j+1] = queArray[j]; // shift upward
                else // if smaller,
                    break; // done shifting
            } // end for
            queArray[j+1] = item; // insert it
            nItems++;
        } // end else (nItems > 0)
    } // end insert()

1 个答案:

答案 0 :(得分:0)

您不清楚如何处理阵列的增长。如果它的大小为8并且你添加它,那么在索引8处访问它将抛出一个AIOOBE。但好吧,假设它以某种方式处理。

  

当得到列表为[1,2,3,4,5,6,8,9]而你插入7

时,我得到了什么

当您将7插入[1,2,3,4,5,6,8,9]时会发生以下情况:

for(j=nItems-1; j>=0; j--) // start at end,

nItems为8 j = 7

if( item > queArray[j] )

所以7 > 9false

queArray[j+1] = item;

如果你没有得到AIOOBE,结果就是[1,2,3,4,5,6,8,9,7]

所以这已经错了。

  

虽然我没有看到它如何正确插入10

当您将10插入[1,2,3,4,5,6,8,9]时会发生以下情况:

for(j=nItems-1; j>=0; j--) // start at end,

nItems为8 j = 7

if( item > queArray[j] )

所以10 > 9true

queArray[j+1] = queArray[j]; // shift upward

(AIOOBE)新阵列是[1,2,3,4,5,6,8,9,9]。

现在j = 6,继续循环

if( item > queArray[j] )

所以10 > 8true

queArray[j+1] = queArray[j]; // shift upward

新阵列是[1,2,3,4,5,6,8,8,9]

继续循环,您将j = 010 > 1 true queArray[j+1] = queArray[j]; // shift upward 结束。

j = -1

新阵列是[1,1,2,3,4,5,6,8,9]。

现在 queArray[j+1] = item; 未通过循环条件

which java

最后一个数组是[10,1,2,3,4,5,6,8,9]。

所以这也是错误的。