2013-10-11 224 views
1

嘗試這個簡單的僞分解成Java代碼混淆僞代碼示例

for j <- 2 to n 
    do key <- A[j] 
     i <- j - 1 
    while i > 0 and A[i] > key 
      do A[i+1] <- A[i] 
      i <- i - 1 
    A[i + 1] = key 

這只是一個插入排序的例子,但我很困惑,什麼沒有,而喊出了「做」是後先做一陣子。

我有這個至今:

for(int j = 2; j < arrayToSort.size(); j++) 
    { 
     int key, i; 
     do 
     { 
      key = arrayToSort.get(j); 
      i = j -1; 
     }while(i > 0 && arrayToSort.get(i) > key); 
    } 

回答

4

其實你與do-while混淆while循環。第一個do這裏不是while的一部分。所以,這不是一個do-while循環。

這只是告訴在循環開始之前在for循環內完成所示的賦值。

所以,等效代碼將是這樣的:

for (int j = 2; j < n; ++j) { 
    int key = A[j]; 
    int i = j - 1; 

    while (i > 0 && A[i] > key) { 
     A[i+1] = A[i]; 
     i = i - 1; // can be replaced with '--i' 
    } 
    A[i + 1] = key 
} 
+0

哦,所以它的字面意思爲「執行以下操作」不是實際do-while循環? – rwarner

+0

@kentoe是的。究竟。 –

+0

非常感謝,現在肯定有道理。我還沒有看到使用「do」的僞代碼 – rwarner