前言
冒泡排序,乃是一种经典的排序方式,属于交换排序,它是一种稳定的、原地的(空间复杂度O(1))、时间复杂性O(n)的排序方式。
在实际学习过程,发现,有好多冒泡泡的方法,不知道该使用哪种好,于是,通通记录一遍。
一 上升法
1.1 简单示意

j游标是本遍扫描的终点,其移动方向为从左向右,终点是n-2(倒数第二个元素);
i游标是上升的泡泡,小的泡泡上去,其移动方向是从右向左,终点是j,如果把数组"0在上,n-1在下的立起来",那就是上升了。
1.2 上升法代码
void bubble_sort(int a[], int n)
{
int i, j, x;
for ( j = 0; j < n-1; j++ ) //j是一遍扫描终点下标
{
for ( i = n-2; i >=j; i-- )
{
if ( a[i] > a[i+1] ) // 发现逆序就交换,小泡泡给爷上去
{
x = a[i];
a[i] = a[i+1];
a[i+1] = x;
}
}
}
}
二 我的想法
2.1 简单示意

j游标是本遍扫描的起点,其移动方向为从右向左,终点是1;
i游标是上升的泡泡,小的泡泡上去,其移动方向是从右向左,终点是0,如果把数组"0在上,n-1在下的立起来",那就是上升了。
2.2 代码
void bubble_sort(int a[], int n)
{
int i, j, x;
for (j=n-1; j>0; j--)
{
for (i=j-1; i>=0; i--)
{
if (a[i+1] < a[i])
{
x = a[i+1];
a[i+1] = a[i];
a[i] = x;
}
}
}
}
三 联系
- 上升法是相向而行的,面对面
- 我的想法是同向而行的。
当然,冒泡排序算法还有改进的空间,因为存在情况:总共6个数据,全部排序需要5遍,但是可能第3遍就已经从小到大排好了,第4遍,第五遍就没必要去排了,所以,可以据此进行改进。
参考资料
[1] 数据结构 – 中国人民解放军陆军工程大学 –陈卫卫、李清等 – 公开课 – 中国大学MOOC
https://www.icourse163.org/course/PAEU-1001660013#/info
本文深入解析冒泡排序算法,包括其经典实现方式如上升法,以及个人创新的排序思路。对比不同冒泡排序方法,探讨算法稳定性、空间及时间复杂度,并提出改进策略,旨在帮助读者理解并掌握冒泡排序的精髓。
1277

被折叠的 条评论
为什么被折叠?



