冒泡排序是一种比较简单而且效率比较高的算法,冒泡排序最好的情况下的时间复杂度为O(n),也就是数据已经排好了,在最坏情况下,时间复杂度为O(n*n),也就是数据全都按关键字逆序排列。
冒泡排序有两重循环,外层循环决定循环的次数,如果有n个数需要排序的话,那就要循环n-1次,这是因为n个数据只需要将最大的n-1个数排到最后就行了,里面的循环是进行比较,前面的数与后面的数进行比较,如果前面的数大于后面的数,就进行交换,外面的循环每进行一次,里面的循环就少进行一次。最初,里面的循环进行n-1次。
代码如下
#include <iostream.h>
void main()
{
int a[10];
for(int i=0;i<10;i++)
{
cout<<"请输入第"<<i+1<<"个数"<<endl;
cin>>a[i];
}
cout<<"你输入的数是:"<<endl;
for(int ii=0;ii<10;ii++)
{
cout<<a[ii]<<ends;
}
cout<<endl;
cout<<"排序之后是"<<endl;
for(int ix=0;ix<9;ix++)
{
bool isrigth=true;
for(int j=0;j<10-ix-1;j++ )
{
if(a[j]>a[j+1])
{
isrigth=false;
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
if(isrigth)
break;
}
cout<<"排好之后是:"<<endl;
for(int iii=0;iii<10;iii++)
{
cout<<a[iii]<<ends;
}
cout<<endl;
}
在内层循环里加上一个布尔类型的变量,如果这次循环没有排好序的话就将isright设置为false,表示没有排好序,如果排好序了,isright的值就没有改变,在本次外层循环里判断出,就跳出循环。
就是因为家了一个变量进行判断,才使得在最好情况下的时间复杂度为O(n).