【问题标题】:Getting Bubble sort to work in C++让冒泡排序在 C++ 中工作
【发布时间】:2014-03-17 22:45:52
【问题描述】:
else if (selection == 16)
{
    int bubbleCount = 0;
    for(bubbleCount = 0; bubbleCount < arraySize; bubbleCount++)
    {
        if (theArray[bubbleCount] > theArray[bubbleCount+1])
        {
            swap(theArray[bubbleCount], theArray[bubbleCount+1]);
        }
    }
}

为了澄清这里发生了什么:

  • selection 是我的变量,用于选择在我的程序中完成的操作。在这个特定的例子中,冒泡排序选择是16

  • arraySize 是用户指定的数组大小。

  • bubbleCount 只是典型 for 循环数组使用的任意名称。

我认为我的逻辑很好。应该发生的是数组从我的计数开始并将其与数组中的相邻元素进行比较。如果它更大,它们会交换。 for 循环应该执行arraySize 迭代。当我用一组随机生成的数字对此进行测试时,它未能完全排序。我哪里搞砸了?

【问题讨论】:

  • 输入、预期结果和实际结果是什么?
  • 正确的冒泡排序需要两个循环,而不是一个。
  • 马克说得对——去阅读一下冒泡排序。此外,您正在将索引 bubbleCount 处的元素与以下元素进行比较,因此您的 for 循环应该在 bubbleCount

标签: c++ arrays sorting bubble-sort


【解决方案1】:

修改代码sn-p如下

// enum { BubbleSort = 16, /*...*/ }

else if ( selection == BubbleSort )
{
    for( int last = arraySize; last > 1 ; --last )
    {
        for ( int first = 1; first < last; ++first )
        {
            if ( theArray[first] < theArray[first - 1] )
            {
                swap( theArray[first], theArray[first - 1] );
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2020-07-26
    • 2014-03-26
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    相关资源
    最近更新 更多