码迷,mamicode.com
首页 > 编程语言 > 详细

算法一:冒泡算法

时间:2016-02-26 11:49:08      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

所谓冒泡算法就是把排序想像成水里的水泡,小的在上面,大的在下面

相邻的两个元素比较,如果前面的比后面的大,就交换。

如有一组数据:3,6,2,1,9

->3,2,1,6,9

->2,1,3,6,9

->1,2,3,6,9

int main()
{
	int a[] = {3,6,2,1,9};
	for (int i = 0; i < sizeof(a)/4; i++)
	{
		for (int j = 0; j < sizeof(a)/4 - i - 1; j++)
		{
			if (a[j]>a[j + 1])
			{
				int temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
			}
		}
	}
	for (int i = 0; i < sizeof(a)/4; i++)
	{
		printf("%d   ", a[i]);
	}
	cin.get();
}

时间复杂度:如果已经是排好的则记录移动次数为n-1,移动数据为0,最好的复杂度为O(N);若文件为反序(最坏)排序为N-1次,每次

排序需要进行N-1次比较,还要进行三次的数据交换。复杂度为O(N2)。空间复杂度为O(1)冒泡排序是一种稳定的排序.

优化:

可以添加一个标志位,如果数据进行了交换则将标记置为flase.如果标记一直为ture则说明,没有交换数据,已经排好序

int main()
{
	int a[] = {3,6,2,1,9};
      bool flage = true;
	for (int i = 0; i < sizeof(a)/4; i++)
	{
            
		for (int j = 0; j < sizeof(a)/4 - i - 1; j++)
		{
			if (a[j]>a[j + 1])
			{
				int temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
                            flage = false;
			}
		}
                if(flage)
                    break;
	}

	for (int i = 0; i < sizeof(a)/4; i++)
	{
		printf("%d   ", a[i]);
	}
	cin.get();
}

 

算法一:冒泡算法

标签:

原文地址:http://www.cnblogs.com/xiaoma123/p/5219619.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!