Sorting 如何知道分拣何时完成

Sorting 如何知道分拣何时完成,sorting,shearsort,Sorting,Shearsort,我目前正在做一些剪切排序,无法确定这个操作应该在何时使用nxn矩阵完成 我现在做的是在循环的每次迭代开始时将矩阵复制到一个临时矩阵,然后在循环的每次迭代结束时,我比较原始矩阵和临时矩阵,如果它们是相同的,那么我就退出循环并退出。我不喜欢这种方法,因为我们总是在排序和完成矩阵之后进行一次额外的迭代,这是对CPU时间和周期的浪费 必须有更好的方法来进行检查。我一直在寻找对log(n)的引用,以表示我们需要多少次迭代,但我不认为它们是指0.69中5x5矩阵的实际log(n)为log(5),这对于迭代次

我目前正在做一些剪切排序,无法确定这个操作应该在何时使用nxn矩阵完成

我现在做的是在循环的每次迭代开始时将矩阵复制到一个临时矩阵,然后在循环的每次迭代结束时,我比较原始矩阵和临时矩阵,如果它们是相同的,那么我就退出循环并退出。我不喜欢这种方法,因为我们总是在排序和完成矩阵之后进行一次额外的迭代,这是对CPU时间和周期的浪费

必须有更好的方法来进行检查。我一直在寻找对log(n)的引用,以表示我们需要多少次迭代,但我不认为它们是指0.69中5x5矩阵的实际log(n)为log(5),这对于迭代次数来说是不可能的


有什么建议吗?

所以我知道shearSort需要日志(n)运行迭代才能完成,所以对于5x5矩阵的情况,我们将对行运行3次,对列运行3次。但是,如果我给出的5x5矩阵几乎是排序的,并且只需要再完成一次或两次迭代,在这种情况下,我看不出迭代6次有什么意义,因为这将被认为是CPU电源和周期的浪费

此外,我们还有以下解决方案:如果我们在shearSort函数的每次迭代开始时将矩阵复制到一个临时矩阵,并且在每次迭代结束时,我们将两个矩阵一起比较,它们是相同的,那么我们就知道我们完成了(注意,这里的迭代意味着行和列排序,因为矩阵一开始可能不需要行排序,但之后需要列排序)。在这种情况下,我们将保留CPU周期,以防矩阵不需要N+1次迭代,但此解决方案将提供一个问题,即当需要N+1次迭代时,我们将进行N+3次迭代以完成(额外的2次迭代将是一次,以检查行和列的2个矩阵是否相同)

要解决这个问题,我们必须结合使用两种解决方案:

我们仍然会在开始时复制矩阵,并在结束时将其与temp矩阵进行比较,如果在我们进行N+1迭代之前它们相等,那么我们就完成了,不需要再进一步,如果它们不相等,那么我们就进行N+1迭代,然后停止,因为我们知道在这一点上,矩阵应该在N+1 itera之后排序是的