C++ 当没有发生泡沫式的掉期交易时,我如何走出循环?
这段代码是关于冒泡排序的,它运行了n次。当数组值未交换时,我希望控制移出循环 我该怎么做C++ 当没有发生泡沫式的掉期交易时,我如何走出循环?,c++,C++,这段代码是关于冒泡排序的,它运行了n次。当数组值未交换时,我希望控制移出循环 我该怎么做 #include<iostream> using namespace std; int main() { const int size=4; int arr[size]; int i,j,temp; for(i=0;i<size;i++) { cout<<"arr["<<i<<"]: ";
#include<iostream>
using namespace std;
int main()
{
const int size=4;
int arr[size];
int i,j,temp;
for(i=0;i<size;i++)
{
cout<<"arr["<<i<<"]: ";
cin>>arr[i];
}
for(i=0;i<size;i++)
{
for(j=0;j<size-1;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(i=0;i<size;i++)
{
cout<<"arr["<<i<<"]: "<<arr[i]<<endl;
}
}
如注释中所述,您应该在内部循环中使用一些标志来指示向量已排序。如果没有进行交换,您可以检查标志并中断外部循环。但是,使用该标志作为外部循环的结束条件更容易。一个更现代的c++实现:
#include <iostream>
#include <vector>
#include <utility>
int main(){
std::vector<int> v={1,4,1,5,7,3,2,3,10};
bool sorted = false;
while (!sorted) {
sorted = true;
for (size_t i = 0; i + 1 < v.size(); ++i){
if (v[i] > v[i+1]){
std::swap(v[i], v[i+1]);
sorted = false;
}
}
}
for (auto i : v){
std::cout << i << std::endl;
}
}
只要内部循环不做任何更改,就要退出外部循环 所以
与您的问题无关,但缩进之类的东西对于使代码可读性很重要。如果代码不可读,那么就很难理解它的功能,愿意尝试和帮助您的人也会减少。请看一看,在ifarr[j]>arr[j+1]{…}的true insde中中断并继续设置一些标志,然后在内部for循环之后检查该标志。
for(i=0;i<size;i++)
{
bool done = true;
for(j=0;j<size-1;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
done = false;
}
}
if (done)
{
break;
}
}