目前我被要求设计四种排序算法(插入,外壳,选择和气泡),我有4个完美地工作;唯一没有正常运作的是冒泡排序。现在,我很清楚正常的冒泡排序如何使用temp var来交换两个索引,但是关于这一点的棘手部分是它需要使用数组索引[0]作为临时而不是一个普通的temp,用于交换,并将下面的数组变量向下滑动到列表的前面,在pass的末尾将最后一个索引赋给temp,这是最大的值。
我已经玩了一段时间,甚至试图查找引用但遗憾的是我找不到任何东西。我希望其他人先做过这件事并提供一些有用的提示。这是一种最后的手段,因为我一直在用笔和纸修改和运行通过试图找到我的致命错误。无论如何,我的代码如下......
void BubbleSort(int TheArray[], int size)
{
for (int i = 1; i < size + 1; i++)
{
TheArray[0] = TheArray[i];
for (int j = i + 1; j < size; j++)
{
if (TheArray[j] > TheArray[0])
TheArray[0] = TheArray[j];
else
{
TheArray[j - 1] = TheArray[j];
}
}
TheArray[size- 1] = TheArray[0];
}
}
感谢任何反馈;非常感谢。
答案 0 :(得分:1)
如果我理解问题陈述,我认为你正在寻找这些方面的东西:
reader.nextInt()
我认为你丢失的代码是,一旦你找到一个新的最大值,你必须在将新的最大值放入theArray [0]存储位置之前将它放回到数组中(参见theArray [ j-1] =比较后的阵列[0])。此外,内部循环每次要运行少一个,因为最后一个元素将是当前最大值,因此您不希望重新访问这些数组元素。 (参见for(int j = 1; j&lt; = size + 1 - i; j ++))
为了完整性,这里是我以前(轻松)测试的主要驱动程序:
void BubbleSort(int theArray[], int size)
{
for (int i = 1; i < size + 1; i++)
{
theArray[0] = theArray[1];
for (int j = 1; j <= size + 1 - i; j++)
{
if (theArray[j] > theArray[0])
{
theArray[j-1] = theArray[0];
theArray[0] = theArray[j];
}
else
{
theArray[j - 1] = theArray[j];
}
}
theArray[size-i+1] = theArray[0];
}
}