如何检查2D数组在C++中是否处于升序?
我无法让这个函数返回true,尽管我已经按升序初始化了数组如何检查2D数组在C++中是否处于升序?,c++,arrays,sorting,C++,Arrays,Sorting,我无法让这个函数返回true,尽管我已经按升序初始化了数组 bool won(int gameBoard[][SIZE]) { for(int i=0;i<SIZE;i++) { for(int j=0;j<SIZE;j++) { if(gameBoard[i][j]>gameBoard[i][j+1]||gameBoard[i][j]>gameBoard[i+1][0]) {
bool won(int gameBoard[][SIZE])
{
for(int i=0;i<SIZE;i++)
{
for(int j=0;j<SIZE;j++)
{
if(gameBoard[i][j]>gameBoard[i][j+1]||gameBoard[i][j]>gameBoard[i+1][0])
{
return false;
}
}
}
return true;
}
代码中有两个问题 一,。i和j的值在某个阶段超出范围 二,。检查数组是否按升序排列的条件是错误的 让我们逐一解决 要使i,j的值保持在范围内,请像这样更改for循环 之前: 之后: 解释: 当j的索引小于SIZE-2时,比较gameBoard[i][j]和gameBoard[i][j+1]是否违反条件。但当j的索引等于SIZE-2时,我们必须比较两件事。一是将gameBoard[i][j]与下一个元素gameBoard[i][j+1]进行比较,另一个是比较j的下一个元素与下一行第一个元素gameBoard[i+1][0]。
N:B:只有在那一次,你才应该检查gameBoard[i][j]是否大于gameBoard[i+1][0],而不是每次都检查。这是一个更安全的版本,它不需要做任何比较,也不需要检查每行开头的索引,所有这些都使用算法函数
#include <algorithm>
// Assuming that the array is 10 x 10
#define SIZE 10
bool won(int gameBoard[][SIZE])
{
return std::is_sorted(&gameBoard[0][0], &gameBoard[SIZE-1][SIZE]);
}
因为2D数组是连续的,所以不需要写循环,因为范围从整个2D数组中第一个项目的地址开始,到最后一个项目的地址结束
当i或j处于其最大值时,[j+1]和[i+1]将超出范围。我如何将其保持在范围内?@Jason您的问题解决了吗?如果是,则您应该接受答案,以便将来理解此问题。您确定for循环中的条件吗?我认为您的程序将输出这种类型的输入/1 2 3 4//9 1 3 1/。。。。。。。。。。未排序的值。。。因为您只是检查第一行并返回true。@ash12这不是OP想要的,即确定数组是否按升序排列吗?请再次检查我的注释。我添加了一个数据。。在comment中很难添加input如果数组是真正的2D数组,那么答案基本相同,因为数据是连续的。只是范围必须扩大,不需要for循环。第二个答案更容易理解和实现+从我这里得到1。但是请检查这个并修复第一个程序,因为我认为它是不正确的。
for(int i=0;i<SIZE-1;i++)
{
for(int j=0;j<SIZE-1;j++)
{
}
}
if(gameBoard[i][j]>gameBoard[i][j+1]||gameBoard[i][j]>gameBoard[i+1][0])
if((j!=SIZE-2 && gameBoard[i][j]>gameBoard[i][j+1])
||(j==SIZE-2 && ((gameBoard[i][j]>gameBoard[i][j+1])||(gameBoard[i][j+1]>gameBoard[i+1][0])))
#include <algorithm>
// Assuming that the array is 10 x 10
#define SIZE 10
bool won(int gameBoard[][SIZE])
{
return std::is_sorted(&gameBoard[0][0], &gameBoard[SIZE-1][SIZE]);
}