算法之路--冒泡排序算法

写在前面

        很早就想系统梳理所接触的所有算法,但是只是存在于一个想法阶段,懒惰使人遗忘不是么。作为一个软件开发人员,绕不开算法与数据结构,既然绕不开,何不逐一分析学习透彻,与君共勉之。

        冒泡排序算法(Bubble Sort)作为排序算法较为基础的一种,也是比较好理解的,所以先从这里开始总结排序算法。排序算法也根据实际的算法思路分为插入排序、选择排序、交换排序、归并排序,冒泡属于交换排序的一种。

算法思路

        冒泡排序,顾名思义就是像水泡上浮一样,大大小小...

         冒泡排序就是从数组的首个元素出发,单步向后移动,一一与后面的元素进行比较,遇到比自己小的元素即进行交换。进行完一轮后将最大值放到最后一位。

52413
step125413
step224513
step324153
step424135

然后再进行下一轮

24135
step124135
step221435
step321345

next round:

21345
step112345
step212345

直到所有都完成

12345
step112345

以上图示中:红色代表原位置,绿色代表待比较位置,蓝色为排序完成位置。

引用动态图示:

 C++示例代码

#include <iostream>
#include <vector>
using namespace std;

void bubble_sort(vector<int>& v)
{
	int len = v.size();
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - i - 1; j++)
		{
			if (v[j] > v[j + 1])
			{
				swap(v[j], v[j+1]);
			}
		}
	}
}

int main()
{
	vector<int> vec{4,2,11,1,5,65,88,43,12,3,4};
	bubble_sort(vec);

	system("pause");
	return 0;
}

时间复杂度

        从上述例子可以看出,不是每一次都必须进行交换,如果发现当前元素即为最小元素,则不必再与后面元素进行比较交换,所以在时间复杂度上存在两个极限:

最优的情况是不用交换排序,一开始一切都排序好了,只需要进行一次遍历即可,时间花销为:[n(n-1)/2]; 复杂度为O(n)

最差的情况就是排序的时候,全部从大到小逆序的,花销时间为[3n(-1)]/2,所以最差的情况下时间的复杂度是执行次数平方为O(n²)

空间复杂度

       使用交换的方法,所以空间负杂度为:O(1)。

注:动态图示引用自菜鸟教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bussy-Lake

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值