2013-05-15 83 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