经典排序算法——冒泡排序

冒泡排序的过程很简单:

比较表中的相邻 元素,如果逆序则交换。重复多次后,最终,最大元素就沉到了列表的最后一个位置。

第二遍操作将第二大的元素沉下去。

直到n-1遍以后,就 完成了排序。

第i遍冒泡排序可以用下面的图来表示:

A_ 0, A_ 1,... A_ j,\leftrightarrow A_ {j+1},... A_ {n-i-1}|A_ {n-i}\leqslant...\leqslant A_ {n-1}

                                                              已经位于最终的位置上

代码 :

void BubbleSort(int a[],int len)
{
	int i,j;
	int temp=0;
	for (i=0;i<len;i++)
	{
		for (j=0;j<len -i-1;j++)
		{
			if (a[j]>a[j+1])
			{
				temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}
		}
	}
	return;
}

对于所有规模为n的数组 来说,该冒泡排序版本的键值比较次数都是相同的:

C(n)=\sum_{i=0}^{n-2}\sum_{j=0}^{n-2-i}1\newline=\sum_{i=0}^{n-2}[(n-2-i)-0+1]\newline =\sum_{i=0}^{n-2}(n-1-i) \newline=\frac{(n-1)n}{2}\in \Theta (n^{2})

但键的交换次数取决于特定的输入,最坏的情况就是遇到降序的数组,这时键的交换次数和比较次数是一样的。

在最坏情况和平均情况下, 属于\Theta (n^{2})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值