0

我正在创建一个程序,该程序按字典顺序打印出序列的所有排列。执行此操作的算法的一部分要求我在发生交换的点之后将所有数字按升序排序。

然而,我的冒泡排序似乎重新排列了错误的数字,即使它在循环中的前 8 个左右的运行中很好地排列了它们。我认为这与我的循环需要运行多少次有关,但我不知道是什么?

这是我的排序不起作用的示例:

顺序为:2-3-4-1,需要重新排列为:2-3-1-4。因此,在 3 之后,所有数字都需要重新排列为升序。但是输出是:2-1-3-4。这意味着它在 2 而不是 1 之后重新排列它们。

这是我的排序:

for(int i=newTrueIndex; i < l; i++)
           {
              for(int j=seenCount+1; j < l; j++)
              {
                 if(seq[j-1] > seq[j])
                 {
                    int temp4=seq[j-1];
                    seq[j-1] = seq[j];
                    seq[j] = temp4; 

                 }
              }

           }

此时 newTrueIndex =1 和 seenCount = 1

并且数字都存储在seq中。

4

2 回答 2

1

关于代码的一些注释

  • 你需要使用冒泡排序吗?(这是家庭作业吗)。如果没有,您可以使用 java.util.Arrays.sort()方法:java.util.Arrays.sort(seq, newTrueIndex, l)

  • 我的 #1 猜测是l不是你所期望的。

  • j 应该从 seeonCount 开始在您的代码中创建一个潜在的故障点。i并且j应该迭代相同的范围。如果您的范围开始于,newTrueIndex那么两个变量都应该从这个值开始。如果两个起点不保持同步,则添加第二个起点(即:seenCount)可能会产生问题。

  • j从那开始seenCount是:一个表示数量但用作索引的值。仅当索引从 0 开始时,计数才等效于索引。

于 2013-07-21T13:26:18.500 回答
0
for(int i=newTrueIndex; i < l; i++){
    for(int j=newTrueIndex; j < i; j++){
        if(seq[i] < seq[j]){
            int temp4 = seq[i];
            seq[i] = seq[j];
            seq[j] = temp4; 
        }
    }
}

这应该可以帮助您按升序排序。

于 2013-08-07T17:46:23.430 回答