【问题标题】:Unexpected Value While using Bubble Sort in C++在 C++ 中使用冒泡排序时出现意外值
【发布时间】:2018-09-25 19:46:18
【问题描述】:

当使用冒泡排序方法对我的数组从小到大进行排序时,它会输出一个意外的值:-858993460。

在调试器中,系统提示我“围绕变量 'numb 的堆栈已损坏'。

我目前正在使用 Visual Studio 来运行代码。

我还在一个新项目中运行了相同的代码,但没有结果。

#include <iostream>


int main()
{
    int length = 6;   
    int temp = 0;     
    int end = 6;
    int numb[] = { 6, 5, 4, 3, 2, 1 };

    for (int counter = length - 1; counter > 0; counter--)
    {
        for (int i = 0; i < end; i++)
        {
            if (numb[i] > numb[i + 1])
            {
                temp = numb[i + 1];
                numb[i + 1] = numb[i];
                numb[i] = temp;
            }
        }
        for (int i = 0; i <= 5; i++)
        {
            std::cout << numb[i] << " ";
        }

        std::cout << "\n";
        end--;
    }

    system("pause");
}

【问题讨论】:

  • 当i == 5时想想numb[i + 1]。
  • 你应该学会使用VS优秀的调试器来单步调试你的代码,观察所有变量的变化等等。
  • 您建议在哪里查找有关学习 vs 调试器的信息?

标签: c++ arrays sorting bubble-sort


【解决方案1】:

在int i = 0; i &lt; end; i++ 的内部for 循环中,您需要将条件设置为i &lt; end - 1。这是因为在交换索引时,您已经使用i + 1 位于数组的末尾。

【讨论】:

  • 我是否正确地说它更改为“end -1”的原因是因为 numb 从 0-5 计数。 p.s.对不起,如果我听起来很傻,因为我还在学习 C++
  • 是的。当i 为5 时,您尝试访问numb[i + 1],这不是您应该访问的索引。这是一个有效的移动,但是,你没有将它定义为任何东西,因此它可以被其他东西使用。当你有end - 1 时,你只会上升到i = 4,允许i + 1 位于数组的最后一个索引处。
猜你喜欢
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 2014-03-26
  • 2018-11-13
相关资源
最近更新 更多