代码改变世界

冒泡排序详细讲解

2012-04-20 22:56  javaspring  阅读(377)  评论(0编辑  收藏  举报

冒泡排序是一种比较简单而且效率比较高的算法,冒泡排序最好的情况下的时间复杂度为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).