C++ I';我正试图用C++;为了练习,但它不起作用

C++ I';我正试图用C++;为了练习,但它不起作用,c++,C++,当我运行它时,它会列出数组中的所有整数,但随后它会永远删除最后三个and循环。我不明白,如果能提出一些建设性的批评,我们将不胜感激 #include <iostream> #include <unistd.h> int ary[8] = {3, 7, 8, 1, 3, 45, 19}; int len (sizeof(ary)/sizeof(ary[0])); int right = 1; int g; int g2; int main() { while(r

当我运行它时,它会列出数组中的所有整数,但随后它会永远删除最后三个and循环。我不明白,如果能提出一些建设性的批评,我们将不胜感激

#include <iostream>
#include <unistd.h>

int ary[8] = {3, 7, 8, 1, 3, 45, 19};
int len (sizeof(ary)/sizeof(ary[0]));
int right = 1;
int g;
int g2;

int main()
{
    while(right != len)
    {
        for(int i = 0; i <= len; i++)
            std::cout << ", " << ary[i];

        std::cout << "\n";
        usleep(120000);

        for(int i = 0; i <= len; i++)
        {
            if(ary[i] <= ary[i + 1])
            {
                right++;
            }
            else
            {
                g = ary[i];
                g2 = ary[i + 1];
                ary[i] = g2;
                ary[i + 1] = g;
            }
        }
    }
}
#包括
#包括
整数[8]={3,7,8,1,3,45,19};
int len(sizeof(ari)/sizeof(ari[0]);
int right=1;
int g;
int-g2;
int main()
{
while(右!=len)
{

对于(inti=0;i,您在这里尝试的操作看起来像是气泡排序。 我已经修复了您代码中的错误,下面是一个工作版本:

#include <iostream>
#include <unistd.h>

int ary[8] = {3, 7, 8, 1, 3, 45, 19};
int len (sizeof(ary)/sizeof(ary[0]));
int right = 1;
int g;
int g2;

int main()
{
    while(right != len)
    {
        // the value of the variable 'right' needs to be reset to 1 everytime you loop
        right = 1;
        for(int i = 0; i < len; i++)
            std::cout << ", " << ary[i];

        std::cout << "\n";
        usleep(120000);

        // as arrays in c++ are zero-indexed, the last element is index len - 1
        for(int i = 0; i < len - 1; i++)
        {
            if(ary[i] <= ary[i + 1])
            {
                right++;
            }
            else
            {
                g = ary[i];
                g2 = ary[i + 1];
                ary[i] = g2;
                ary[i + 1] = g;
            }
        }
    }
}

尽管尝试自己解决问题是一种很好的做法,通常会有所帮助,但在这种情况下,我认为您应该阅读一些文档。 作为参考,这是传统气泡排序的外观:

#include <iostream>

int a[] = {3, 7, 8, 1, 3, 45, 19};
const int len = sizeof(a) / sizeof(int);

int main () {
  for (int i=0; i<len; ++i) {
    for (int j=i+1; j<len; ++j) {
      if (a[i] > a[j])
        std::swap(a[i], a[j]);
    }
  }
  for (int i=0; i<len; ++i)
    std::cout << a[i] << ' ';
  return 0;
}
#包括
INTA[]={3,7,8,1,3,45,19};
常数int len=sizeof(a)/sizeof(int);
int main(){

for(int i=0;i它将永远运行,因为for循环将最后一项i[8]与i[8+1]进行比较,并且i[8+1]为空 所以要解决这个问题

for(int i = 0; i < len - 1; i++)
for(int i=0;i
而不是

for(int i = 0; i <= len; i++)

用于(int i=0;i大小为N的数组的最后一个有效索引为N-1这看起来不会排序。如果元素顺序不正确,您只需交换元素,但只需传递数组一次。实际上,您需要执行N^2次,以确保整个数组已排序。N是数组的长度。我建议使用调试器。调试器将允许另一种调试方法是:每次交换后,用索引打印整个数组。
for(int i = 0; i <= len; i++)
#include <iostream>
#include <unistd.h>

int ary[8] = {3, 7, 8, 1, 3, 45, 19};
int len (sizeof(ary)/sizeof(ary[0]));
int Round = 0;
int g;
int g2;

int main()
{
    while(Round != len)
    {
        for(int i = 0; i < len; i++)
            std::cout << ", " << ary[i];

        std::cout << "\n";
        usleep(120000);

        for(int i = 0; i < len - 1; i++)
        {
            if(ary[i] <= ary[i + 1])
            {
                continue;
            }
            else
            {
                g = ary[i];
                g2 = ary[i + 1];
                ary[i] = g2;
                ary[i + 1] = g;
            }
        }
        Round++;
    }
}