请有人请解释此方法为我插入优先级队列。当我说列表是[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()
答案 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 > 9
是false
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 > 9
是true
queArray[j+1] = queArray[j]; // shift upward
(AIOOBE)新阵列是[1,2,3,4,5,6,8,9,9]。
现在j = 6
,继续循环
if( item > queArray[j] )
所以10 > 8
是true
queArray[j+1] = queArray[j]; // shift upward
新阵列是[1,2,3,4,5,6,8,8,9]
继续循环,您将j = 0
与10 > 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]。
所以这也是错误的。