有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java My bubble排序似乎运行了太多次,或者是向后运行

我正在创建一个程序,按照字典顺序打印出序列的所有排列。算法的一部分是这样做的,它要求我在交换发生点之后将所有数字按升序排序

然而,我的冒泡排序似乎在重新排列错误的数字,即使它在循环的前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) 个答案

  1. # 1 楼答案

    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; 
            }
        }
    }
    

    这将帮助您按升序排序

  2. # 2 楼答案

    关于代码的一些注释

    • 是否需要使用气泡排序?(这是家庭作业吗)。如果没有的话,还有java。util。数组。排序()method,您可以使用它: java.util.Arrays.sort(seq, newTrueIndex, l)

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

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

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