2014-02-10 213 views
0

我正在做一項任務,教授不希望我們使用任何其他代碼來插入除他提供的僞代碼以外的值。我誤解了這個僞代碼嗎?

我在做什麼的簡要說明。我正在創建一個動態的整數數組,它們將按順序插入(從最低到最高)。

這裏是他提供的僞代碼:

for (i = valueNum - 1; array[i] is the wrong spot for newValue; --i) 
    array[i] = array[i-1] 

其中陣列[i]是用於NEWVALUE錯了地方:

(i > 0) AND (value at array[i-1] is greater than newValue) 

他也包括這樣的信息:

你也應該說服自己上述僞代碼適用於(即,也覆蓋)要存儲的新值是#1值的情況,要存儲的新值大於或等於最高現有值的情況,以及要存儲的新值小於或等於最小現有值的情況。

所以,它看起來很直截了當。我給它一個嘗試:

void IntArray::insert(int nInt) 
{ 
    /* check if resize is needed */ 
    if(mySize == capacity) 
    { 
     int newCapacity = capacity * 1.5; 
     if(newCapacity == capacity) 
      newCapacity = capacity + 1; 
     capacity = newCapacity; 
    } 

    /* here is where my mistake was */ 
    int i; 
    mySize++; 

    for(i = mySize -1; i > 0 && data[i-1] > nInt; --i) 
    { 
     data[i] = data[i - 1]; 
    } 
    data[i] = nInt; 
} 

現在看來似乎正確遵循僞代碼,但它看起來像它不將永遠工作,如果mySize爲0或1。有人能指出我在正確的方向?

+0

您是否嘗試過使用mySize在0或1處運行它?怎麼了? –

+0

只是在不改變存儲空間的情況下更改'容量'是不會有太大幫助的,是嗎?你不需要分配一些東西嗎?你也從來沒有實際存儲新的價值。 –

+0

@DamienBlack它不會進入循環,因爲它不符合條件語句。 – Bobbin4Apples

回答

1

在不同的意見,我說:

只是不斷變化的容量不改變存儲是不會幫助很大,是嗎?你不需要分配一些東西嗎?你也從來沒有實際存儲新的價值。

和(輕度編輯):

更新(定時2014年2月10日19:19:10Z)看起來像什麼,我期望使用。當mySize最初爲0時它顯然起作用;你增加它到1,然後設置i = 0並倒計時(一個無操作),結束設置data[0] = nInt;。當你有一行時,新的可以比現有的更大,或者小於或等於現有的。如果它更大,則i不會遞減,因此新條目將在處放入您想要的位置。如果它較小,則i遞減,舊值由循環主體向上移動,並將新值插入data[0]所需的位置。沖洗並重復...