每次提到冒泡排序总会有人问我:冒泡排序是个啥呀,它为啥叫冒泡排序啊。
不得不说,很多人都听过冒泡排序,但是你了解它是什么样的算法吗?
之前我有写过一篇桶排序的博文,里面介绍了简单的桶排序的原理,虽然桶排序简单好用,但是我们知道,如果我们需要比较的元素有N个,我们就需要申请N+1个空间来存储它,这对于我们的空间十分的浪费。所以,人们又发现了一种新的排序方法,那就是冒泡排序。
冒泡排序的基本思想是:比较相邻两个元素的大小,如果顺序错误就将他们的位置进行交换;
现在我们有一组数字2 5 9 3 12 7 6 10,我们来对这组数字进行冒泡排序:(下面是一次冒泡排序的过程)(画了好半天,好想吐槽一下自己连画图板都不会用了 )
下面,我们试着用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),这是一个非常高的时间复杂度!
虽然冒泡排序的效率十分低,但对于初学者来说一定要学会它的思想和技巧!
转载于:https://blog.51cto.com/zimomo/1708638