冒泡的几种姿势——吃饱了撑的冒泡排序

前言

冒泡排序,乃是一种经典的排序方式,属于交换排序,它是一种稳定的原地的(空间复杂度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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值