冒泡排序使用幻灯片而不是交换

时间:2015-09-07 23:58:24

标签: c++ algorithm sorting data-structures

目前我被要求设计四种排序算法(插入,外壳,选择和气泡),我有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];
    }
}

感谢任何反馈;非常感谢。

1 个答案:

答案 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];
    }
}