我正在创建一个程序,以字典顺序打印出序列的所有排列。执行此操作的算法的一部分,要求我在交换发生点之后将所有数字分类为升序。
但是,我的冒泡排序似乎正在重新排列错误的数字,即使它在循环中的前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。
中答案 0 :(得分:1)
关于代码的一些注释
您是否需要使用冒泡排序? (这是一项家庭作业)。如果没有,您可以使用java.util.Arrays.sort()method:
java.util.Arrays.sort(seq, newTrueIndex, l)
我的#1猜测是l
的值不是您所期望的。
j应该从seeonCount开始,在您的代码中创建一个潜在的失败点。 i
和j
应该迭代相同的范围。如果您的范围从newTrueIndex
开始,则两个变量都应从此值开始。如果两个起始点没有保持同步,则添加第二个起点(即:seenCount)可能会产生问题。
j
从seenCount
开始,它是:表示数量但用作索引的值。只有当索引从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;
}
}
}
这可以帮助您按升序排序。