我的冒泡排序似乎运行了太多次,或者倒退了

时间:2013-07-21 12:46:19

标签: java sorting logic bubble-sort

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

但是,我的冒泡排序似乎正在重新排列错误的数字,即使它在循环中的前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。

2 个答案:

答案 0 :(得分:1)

关于代码的一些注释

  • 您是否需要使用冒泡排序? (这是一项家庭作业)。如果没有,您可以使用java.util.Arrays.sort()methodjava.util.Arrays.sort(seq, newTrueIndex, l)

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

  • j应该从seeonCount开始,在您的代码中创建一个潜在的失败点。 ij应该迭代相同的范围。如果您的范围从newTrueIndex开始,则两个变量都应从此值开始。如果两个起始点没有保持同步,则添加第二个起点(即:seenCount)可能会产生问题。

  • jseenCount开始,它是:表示数量但用作索引的值。只有当索引从0开始时,count才等于索引。

答案 1 :(得分: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; 
        }
    }
}

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