C++ 当没有发生泡沫式的掉期交易时,我如何走出循环?

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<<"]: ";

这段代码是关于冒泡排序的,它运行了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<<"]: ";
        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;
    }
}