每次提到冒泡排序总会有人问我:冒泡排序是个啥呀,它为啥叫冒泡排序啊。

不得不说,很多人都听过冒泡排序,但是你了解它是什么样的算法吗?

之前我有写过一篇桶排序的博文,里面介绍了简单的桶排序的原理,虽然桶排序简单好用,但是我们知道,如果我们需要比较的元素有N个,我们就需要申请N+1个空间来存储它,这对于我们的空间十分的浪费。所以,人们又发现了一种新的排序方法,那就是冒泡排序。

冒泡排序的基本思想是:比较相邻两个元素的大小,如果顺序错误就将他们的位置进行交换;

我们再来举个栗子:j_0037.gif

现在我们有一组数字2 5 9 3 12 7 6 10,我们来对这组数字进行冒泡排序:(下面是一次冒泡排序的过程)(画了好半天,好想吐槽一下自己连画图板都不会用了 j_0016.gif

wKioL1Y2JHOSM5YIAAEStkQ7L3A286.jpg

下面,我们试着用C语言来实现我们的冒泡排序:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int b[] = { 5, 2, 8, 9, 1 };
	int n = 5;
	int i = 0;
	int j = 0;
	for (i =0; i <n; i++)//n 表示有n个数字进行排序
	{
		for (j = 0; j <n-i-1; j++)
		{
			if (b[j]>b[j + 1])
			{
				int  t = b[j];
				b[j] = b[j +1];
				b[j +1] = t;
			}
		}
	}
	for (i = 0; i < 5; i++)
	{
		printf("%d ", b[i]);
	}
	system("pause");
	return 0;
}

上述程序实现了我们的冒泡排序算法,大家可以自己试试哦~

冒泡排序的精髓在于他的循环嵌套以及嵌套的循环的判断条件,不难看出 冒泡排序的时间复杂度是O(N^2),这是一个非常高的时间复杂度!

虽然冒泡排序的效率十分低,但对于初学者来说一定要学会它的思想和技巧!