为什么冒泡排序不起作用

why is bubble sort not working

给定一些数字和数字的数量,我必须按升序对它们进行排序,然后输出完成了多少次传递和交换。为什么它不起作用?另外,我想用向量来解决这个问题;我是否将矢量传递给函数并正确调用它?

//bubble Sort
#include<iostream>
#include<vector>
using std::cin;
using std::cout;

bool isSorted(std::vector<int> & myData);

int main()
{
    std::vector<int> myData;
    int length = 0;
    int pass = 0;
    int swap = 0;

    cin >> length;


    int x = 0;

    for(x; x < length; x++)
    {
        int input = 0;
        cin >> input;
        myData.push_back(input);
    }

    x = 1;

    while(!isSorted(myData))
    {
        int trash = 0;
        for(x; x < length; x++)
        {
            if(myData[x] < myData[x-1])
            {
                trash = myData[x];
                myData[x] = myData[x-1];
                myData[x-1] = trash;

                swap++;

            }


        }
        pass++;

    }

    cout << pass << " " << swap;

    return 0;
}

bool isSorted(std::vector<int> & myData)
{

    for(int i = 1; i < myData.size(); i++)
    {
        if(myData[i] < myData[i-1])
        {
            return false;
        }
    }
    return true;
}

您不会在冒泡排序的迭代之间重置 x。发生的情况是,在外循环的第一次迭代之前 x 等于 1。然后,您 运行 内部 while 循环直到 x 变为 length,然后转到外循环的下一次迭代。到下一次迭代时 x 永远不会被重置,所以它仍然等于 length,所以第二次迭代没有任何反应,内循环立即中断而不做任何工作。您转到外循环的第三次迭代,然后再没有任何反应。特别是,您的数组永远不会排序,因此外部 while 循环永远不会中断,并且程序永远不会完成(并且永远不会打印任何内容)。

要修复它,只需将 x = 1 移动到循环内,如下所示:

...
while(!isSorted(myData))
{
    x = 1;
    int trash = 0;
...