问题:利用C++对不含0元素的数列进行冒泡排序,出现最大数丢失,排序后数列第一个数变为0。
出错代码:
#include<iostream>
using namespace std;
int main()
{
int n,i,j,temp;
cin>>n;
int a[n];
for(i=0;i<n;i++){
cin>>a[i];
}
for(i=0;i<n;i++){
for(j=0;j<n-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0;i<n;i++) cout<<a[i]<<' ';
return 0;
}
问题分析:冒泡排序时第二层for循环中a[j+1]出现数组越界
问题解决:将第二层for循环中 j<n-i改成j<n-i-1
正确代码:
#include<iostream>
using namespace std;
int main()
{
int n,i,j,temp;
cin>>n;
int a[n];
for(i=0;i<n;i++){
cin>>a[i];
}
for(i=0;i<n;i++){
for(j=0;j<n-i-1;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0;i<n;i++) cout<<a[i]<<' ';
return 0;
}
本文介绍了一段使用C++实现的冒泡排序代码,该代码在对不含0元素的数列进行排序时出现最大数丢失及首个元素变为0的问题。通过分析发现原因是数组越界,并给出了修改后的正确代码。
1030

被折叠的 条评论
为什么被折叠?



