冒泡排序代码哪里错了
#include<iostream>using namespace std;
int main()
{
int arr[]={4,2,8,9,3,5,7};
int i;
cout<<"排序前"<<"";
for(int i=0;i<=6;i++)
{
cout<<arr<<endl;
}
for(int k=0;k<7-1;k++)
{
for(int j=0;j<7-1-k;j++)
{
if(arr>arr);
{
int temp=arr;
arr=arr;
}
}
}
cout<<"排序后"<<"";
for(int i=0;i<=6;i++)
{
cout<<arr<<endl;
}
return 0;
} 你的冒泡排序代码中存在一个小错误,这是在内部的if语句中。你在if语句后面加了一个分号,这实际上使得if语句结束,而后面的代码块总是会执行,不论if条件是否满足。这就导致了你的排序算法没有按照预期工作。
下面是修正后的代码:
#include<iostream>
using namespace std;
int main()
{
int arr[]={4,2,8,9,3,5,7};
int i;
cout<<\"排序前\"<<\"\";
for(int i=0;i<=6;i++)
{
cout<<arr[ i]<<endl;
}
for(int k=0;k<7-1;k++)
{
for(int j=0;j<7-1-k;j++)
{
if(arr>arr) // 删除了这里的分号
{
int temp=arr;
arr=arr;
arr=temp; // 添加了这一行,将临时变量的值赋给arr
}
}
}
cout<<\"排序后\"<<\"\";
for(int i=0;i<=6;i++)
{
cout<<arr[ i]<<endl;
}
return 0;
}
这个修正后的代码将正确地执行冒泡排序。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案 这段代码中的问题在于,冒泡排序的交换操作没有正确执行。具体来说,当判断 arr>arr 时,应该执行交换操作,但是当前代码中,交换操作被放在了 if 语句的括号内,导致即使条件不满足时也会执行交换操作。因此,你需要将交换操作放到 if 语句的括号外面,即去掉一个分号。
下面是修改后的代码:
#include<iostream>
using namespace std;
int main()
{
int arr[]={4,2,8,9,3,5,7};
int i;
cout<<"排序前"<<endl;
for(int i=0;i<=6;i++)
{
cout<<arr[ i]<<endl;
}
for(int k=0;k<7-1;k++)
{
for(int j=0;j<7-1-k;j++)
{
if(arr>arr)
{
int temp=arr;
arr=arr;
arr=temp;
}
}
}
cout<<"排序后"<<endl;
for(int i=0;i<=6;i++)
{
cout<<arr[ i]<<endl;
}
return 0;
}
修改后的代码中,当 arr>arr 时,执行了正确的交换操作,即将 arr 和 arr 的值互换。 你好,冒泡排序的问题在于代码中的一个分号:
if(arr>arr);
这里多了一个分号,导致语句不起作用,实际上这个 if 语句后面的花括号中的内容永远不会被执行。正确的代码应该是这样的:
if (arr > arr) {
int temp = arr;
arr = arr;
arr = temp;
}
此外,int i 这个变量在代码中没有使用,可以将其删除。
修改后的正确代码如下:
#include<iostream>
using namespace std;
int main()
{
int arr[] = {4,2,8,9,3,5,7};
cout << "排序前:";
for(int i=0; i<=6; i++)
{
cout << arr << " ";
}
cout << endl;
for(int k=0; k<7-1; k++)
{
for(int j=0; j<7-1-k; j++)
{
if(arr > arr) {
int temp = arr;
arr = arr;
arr = temp;
}
}
}
cout << "排序后:";
for(int i=0; i<=6; i++)
{
cout << arr << " ";
}
cout << endl;
return 0;
}
希望能够帮助你解决问题,如果你还有其他问题,可以继续提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页:
[1]