这个伪代码的正确代码是什么?

时间:2013-05-15 14:05:34

标签: pseudocode

我没有得到伪代码FOR循环的东西。

这个伪代码的正确代码(用任何语言)是什么?

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

1 个答案:

答案 0 :(得分:0)

在C#(或Java中,如果你对“长度”进行资本化):

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;
        }
    }
}

使用while代替for:

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
            ...

这意味着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循环必须表现的方式,以及while实现应该如何(按惯例)。

代码本身看起来是bubble sort实现的尝试,但是基于与索引的比较而不是其他元素进行排序。我不确定它的意义是什么。