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