如何检查我的数组是否按升序排列?

时间:2013-10-04 08:25:05

标签: c arrays sorting multidimensional-array shuffle

所以我有一个数组板[] [],其值不断改变。它是一个方形阵列,尺寸为d * d。我想检查数组以查看其所有值是否按升序排列。

for (int i = 0; i < d; i++)
{
    for (int j = 0; i < d; i++)
    {
        if (board[i][j] == (d * i) + j + 1)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

问题是,只要数组板[0] [0]中的第一个元素= 1,它就返回true,并结束我的代码。我不知道如何实现它,以便它不会返回true,直到数组中的所有元素按升序排列,从1到(d * d - 1)。

谢谢!

4 个答案:

答案 0 :(得分:3)

如果我理解你的问题我认为你想这样做:

int Previous = board[0][0];
for (int i = 0; i < d; i++)
{
    for (int j = 0; j < d; j++)
    {
        if (board[i][j] < Previous)
        {
            return false;
        }

        Previous = board[i][j];
    }
}
return true; // Only at the end do we know that all elements are in ascending order

你所拥有的问题是:

  1. 您在两种情况下都返回,而不是在检查完所有值后返回
  2. 你的第二个for循环是错误的并引用i,而不是j
  3. 您的比较是将board值与索引进行比较,而不是其他board

答案 1 :(得分:2)

这应该有效

for (int i = 0; i < d; i++)
{
    for (int j = 0; j < d; j++)
    {
        if (board[i][j] != (d * i) + j + 1)
        {
           return false;
        }
    }
}
return true;

答案 2 :(得分:1)

尝试将return true替换为continue

for (int i = 0; i < d; i++)
{
    for (int j = 0; i < d; i++)
    {
        if (board[i][j] == (d * i) + j + 1)
        {
            continue;
        }
        else
        {
            return false;
        }
    }
}

如果您反转条件,也可以完全删除continue子句:

        if (board[i][j] != (d * i) + j + 1)
        {
            return false;
        }

答案 3 :(得分:0)

1)首先你的意思是升序(垂直,水平或对角线?) 2)替换你的if语句 if((board [i] [j]&gt; board [i] [j + 1])||(board [i] [j]&gt; board [i + 1] [j]))