这个冒泡排序为什么错了
#include <iostream>using namespace std;
#include <vector>
vector<int> pai(vector<int> nums)
{
vector<int> res;
if (nums.size() == 1)
{
res.push_back(nums);
return res;
}
int i = 0;
while (i < nums.size() - 1)
{
if (nums < nums)
{
int c = nums;
nums = nums;
nums = c;
}
i = i + 1;
}
vector<int> new1(nums.begin(), nums.end() - 1);
res.push_back(nums);
return pai(new1);
}
int main()
{
int n;
cin >> n;
int num;
vector<int> nums1;
for (int i = 1; i <= n; i++)
{
cin >> num;
nums1.push_back(num);
}
nums1 = pai(nums1);
for (int i = nums1.size()-1; i >=0; i--)
{
cout << nums1 << " ";
}
return 0;
} 问题出在冒泡排序的实现上。冒泡排序的基本思想是通过相邻元素的比较和交换来实现排序,但是你的代码中只进行了一次比较和交换,而没有进行多次循环来完整地进行排序。
在你的代码中,只有一个while循环,循环条件是i < nums.size() - 1,即只进行一轮循环。在这一轮循环中,只进行了一次比较和交换操作,即如果nums < nums[ i],则交换两个元素的位置。然后更新i的值,继续下一轮循环。
然而,冒泡排序需要进行多次循环,每次循环都将最大的元素冒泡到最后的位置。你的代码中缺少了这个多次循环的部分,导致排序结果是错误的。
为了修正这个问题,你需要在while循环外再套一个for循环,这个for循环控制多次循环的次数。每次循环中,都要进行一轮完整的冒泡排序操作。
修正后的代码如下:
vector<int> pai(vector<int> nums)
{
vector<int> res;
if (nums.size() == 1)
{
res.push_back(nums);
return res;
}
for (int j = 0; j < nums.size() - 1; j++) // 多次循环
{
int i = 0;
while (i < nums.size() - 1)
{
if (nums < nums[ i])
{
int c = nums;
nums = nums[ i];
nums[ i] = c;
}
i = i + 1;
}
}
vector<int> new1(nums.begin(), nums.end() - 1);
res.push_back(nums);
return pai(new1);
}
修正后的代码中,在while循环外套了一个for循环,控制多次循环的次数。每次循环中,都会进行一轮完整的冒泡排序操作。这样就可以得到正确的排序结果。 这段代码实现了使用冒泡排序对输入的一组整数进行排序。然而,代码中存在一个错误导致排序结果不正确。
错误在于冒泡排序的实现部分。在当前的实现中,只进行了一次比较和交换操作,并没有进行多轮的比较和交换来正确排序。
要修复这个错误,需要对冒泡排序的实现进行修改。以下是修复后的代码:
#include <iostream>
#include <vector>
using namespace std;
vector<int> bubbleSort(vector<int> nums)
{
int n = nums.size();
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (nums > nums)
{
int temp = nums;
nums = nums;
nums = temp;
}
}
}
return nums;
}
int main()
{
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++)
{
cin >> nums;
}
nums = bubbleSort(nums);
for (int i = 0; i < n; i++)
{
cout << nums << " ";
}
return 0;
}
修复后的代码中,我们使用了两层嵌套的循环。外层循环控制排序的轮数,内层循环执行相邻元素的比较和交换操作。通过多次循环,每次都将最大元素移动到数组末尾,逐步实现排序。
希望以上回答对您有所帮助。如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页:
[1]