C++ 这题错在哪里了?

来源:百度知道 编辑:UC知道 时间:2024/05/27 16:45:15
将下列数组倒续排放

#include "iostream"
#include "cmath"
#include "iomanip"

using namespace std;

int main()
{
int i,a[5]={8,6,5,4,1},temp;
for(i=0;i<=4;i++)
if(a[i]>a[i+1])
{ temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
cout<<a[i]<<endl;

return 0;
}
上面main内代码修正了以后的错误,请帮我看一下

{
int i,a[6]={8,6,5,4,1},temp;
for(i=0;i<5;i++)
if(a[i]>a[i+1])
{ temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
for(i=0;i<6;i++)
cout<<a[i]<<endl;

return 0;
}

for(i=0;i<=4;i++)
这里,当i=4是还满足循环条件,
但下边有a[i+1] (a[5])
这就出现下标越界了.
应该为:
for(i=0;i<4;i++)

如果是指排序就连最基础的冒泡排序也至少双循环嘛(即至少O(n*n))

例如这样:
for(int i=0;i<=4;++i)
{
for(int j = 0;j<=4;++j)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}

如果只是将数组倒过来输出……那直接从后索引数组输出不就好了,何必还排序呢……如果一定要排序,那么倒过来把元素复制到新数组不就好了……

其实我回答是因为,竟然有新手用标准头文件,相当罕见啊,就凭楼主罕见的行为我也得回复啊