问题:利用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;
}