2013-05-15 80 views
0

我不是很喜歡僞代碼循環的東西。什麼是這個僞代碼的正確代碼

對於這個僞代碼,什麼是正確的代碼(用任何語言)?

function myFunction(arr[]) 
    for i = 0 to length(arr) 
     if (arr[i] > i) then 
      j = i 
      while (j < length(arr)) and (arr[j] >= j) 
       j = j + 1 
      temp = arr[i] 
      arr[i] = arr[j] 
      arr[j] = temp 
      i = 0 
+0

你爲什麼這麼問? – desperateCoder

+0

任何C語言風格語言的代碼看起來都非常相似。爲什麼不問問這個僞代碼呢? –

+0

因爲對我來說有兩個選項: 它可能是: 的for(int i = 0; I <長度(ARR);我++) 或者它可以是: 而(I'長度(ARR)) 如果(arr [i]> i) i = 0; else i ++; – orsi

回答

0

這是在C#(或Java,如果你decapitalize 「長度」):

void myFunction(int[] arr) 
{ 
    for(int i = 0; i < arr.Length; i++) 
    { 
     if(arr[i] > i) 
     { 
      int j = i; 
      while(j < arr.Length && arr[j] >= j) 
       j = j + 1; 
      int temp = arr[i]; 
      arr[i] = arr[j]; 
      arr[j] = temp; 
      i = 0; 
     } 
    } 
} 

同時使用,而不是爲:

void myFunction(int[] arr) 
{ 
    int i = 0; 
    while(i < arr.Length) 
    { 
     if(arr[i] > i) 
     { 
      int j = i; 
      while(j < arr.Length && arr[j] >= j) 
       j = j + 1; 
      int temp = arr[i]; 
      arr[i] = arr[j]; 
      arr[j] = temp; 
      i = 0; 
     } 
     i++; 
    } 
} 

注意的壓痕結構僞代碼:

function myFunction(arr[]) 
    for i = 0 to length(arr) 
     if (arr[i] > i) then 
      ... 

This意味着for語句下面的所有內容都在循環中,並且if之下的所有內容(包括將i設置爲0)都將位於條件塊內。鑑於這個事實,如果if語句被輸入,我必須從1開始。如果代碼如下所示會發生什麼?

void myFunction(int[] arr) 
{ 
    int i = 0; 
    while(i < arr.Length) 
    { 
     if(arr[i] > i) 
     { 
      int j = i; 
      while(j < arr.Length && arr[j] >= j) 
       j = j + 1; 
      int temp = arr[i]; 
      arr[i] = arr[j]; 
      arr[j] = temp; 
      i++; 
      i = 0; 
     } 
    } 
} 

arr[i] <= i的情況下,循環不會終止。

除非另有明確規定,否則應該始終假定迭代循環的最後一個操作是索引的移位。這是一個for循環必須如何行事的方式,以及一段時間執行應該如何(按照慣例)。

代碼本身看起來是一個bubble sort實現的嘗試,但基於與索引的比較而不是其他元素進行排序。我不確定它意味着什麼。

+0

所以在這個變體中,如果arr [i]> i - 是真的,那麼下一次迭代將從i = 1開始,而不是0?僞代碼告訴我們它應該從0開始 – orsi

+0

@orsi您對行爲是正確的,但不涉及僞代碼意味着什麼。除非另有明確說明,否則應該假定循環索引增量(無論是for或者while/i ++完成)將是循環體的最後一個操作。這是for循環必須如何表現的行爲(正如你所說的),while的實現應遵循相同的約定。如果代碼旨在將i設置爲0,那麼爲什麼不在增量之前分配i = -1?而且,不需要從0開始排序。 –

+0

那麼,這不是排序算法,更像是一個腦筋急轉彎。 這就是我想了解的 - 這段代碼是否明確指出,我應該在迭代結束時變爲0,或者它假定在新的開始時它會增加...... – orsi