C++ I';我正试图用C++;为了练习,但它不起作用
当我运行它时,它会列出数组中的所有整数,但随后它会永远删除最后三个and循环。我不明白,如果能提出一些建设性的批评,我们将不胜感激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
#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++;
}
}