为什么泡沫排序不起作用

why is bubble sort not working

本文关键字:不起作用 排序 泡沫 为什么      更新时间:2023-10-16

给定一些数字和数字的数量,我必须按升序对它们排序,然后输出传递和交换的次数。为什么不工作?同样,我想用一个向量来解决这个问题;我是否将向量传递给函数并正确地调用它?

//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;
...