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

冒泡排序的过程很简单:

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

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

直到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})

猜你喜欢

转载自blog.csdn.net/zxycele/article/details/81490997