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

Bubble Sort Using Slides instead of swaps

本文关键字:交换 幻灯片 冒泡排序      更新时间:2023-10-16

目前我被要求设计四种排序算法(插入,外壳,选择和气泡),我有4个工作完美的3;唯一不能正常工作的是冒泡排序。现在,我很清楚正常的冒泡排序如何与使用临时变量交换两个索引,但棘手的部分是,它需要使用数组索引[0]作为临时代替正常的温度,用于交换,和幻灯片下数组变量列表的前面,最后通过分配最后指数的温度是最大的价值。

我已经玩了一段时间,甚至试图查找参考资料,但遗憾的是我找不到任何东西。我希望其他人之前做过这个,可以提供一些有用的建议。这是一种最后的手段,因为我一直在修改和运行通过笔和纸,试图找到我的致命错误。无论如何,我的代码如下…

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

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

如果我理解了问题说明,我认为您正在寻找以下内容:

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

你的代码缺少的部分,我认为,是一旦你找到一个新的最大值,你必须把它放回数组中,然后把新的最大值放在数组[0]存储位置(见比较后的theArray[j-1] = theArray[0])。此外,内部循环希望每次少运行一次,因为最后一个元素将是当前的最大值,所以您不想重新访问这些数组元素。(见for(int j = 1;J <= size + 1 - I;j + +))

为了完整起见,下面是我用来(简单地)测试它的主要驱动程序:
int main()
{
    int theArray[] = { 0, 5, 7, 3, 2, 8, 4, 6 };
    int size = 7;
    BubbleSort(theArray, size);
    for (int i = 1; i < size + 1; i++)
        cout << theArray[i] << endl;
    return 0;
}