原始版本
这里写代码片
#include<iostream>
using namespace std;
int main()
{
int a[100];
int i,j,n,lastchange;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n-1;i++)
for(j=n;j>=i+1;j--)
if(a[j]<a[j-1])
{
a[j]=a[j]^a[j-1];
a[j-1]=a[j-1]^a[j];
a[j]=a[j]^a[j-1];
}
for(i=1;i<=n;i++)
cout<<a[i]<<"\t";
return 0;
}
优化一
#include<iostream>
using namespace std;
int main()
{
int a[100];
int i,j,n,lastchange;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
i=2;
while(i<n)
{
lastchange=n;
for(j=n;j>=i;j--)
if(a[j]<a[j-1])
{
a[j]=a[j]^a[j-1];
a[j-1]=a[j-1]^a[j];
a[j]=a[j]^a[j-1];
lastchange=j;
}
i=lastchange;
}
for(i=1;i<=n;i++)
cout<<a[i]<<"\t";
return 0;
}
类优化二
#include<iostream>
using namespace std;
int main()
{
int a[100];
int i,j,n,lastchange;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
i=n;
while(i>1)
{
lastchange=1;
for(j=2;j<=i;j++)
if(a[j]<a[j-1])
{
a[j]=a[j]^a[j-1];
a[j-1]=a[j-1]^a[j];
a[j]=a[j]^a[j-1];
lastchange=j;
}
i=lastchange;
}
for(i=1;i<=n;i++)
cout<<a[i]<<"\t";
return 0;
}
类优化3
#include<iostream>
using namespace std;
int main()
{
int a[100];
int i,j,n,lastchange;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=n;i>1;)
{
lastchange=1;
for(j=2;j<=i;j++)
{
if(a[j]<a[j-1])
{
a[j]=a[j]^a[j-1];
a[j-1]=a[j-1]^a[j];
a[j]=a[j]^a[j-1];
lastchange=j;
}
}
i=lastchange;
}
for(i=1;i<=n;i++)
cout<<a[i]<<"\t";
return 0;
}
感言:冒泡排序对一些较为良好的顺序的速度太慢了,因此有了优化版本