C语言经典排序算法--冒泡排序

冒泡排序

1.思路原理

  • 冒泡排序在C语言中是很经典的一种排序,只要你学过C,那么它的大名你肯定听说过。而面试也非常常见这排序算法,经常会有面试官让你手写冒泡排序。就像我当初毕业时去面试,面试官第一句话就问:你学过C语言吗?写一个冒泡排序来看看。

  • 好了,进入正文,我们一起来分析分析冒泡排序的原理,并在文末给出实现的代码。
    在这里插入图片描述

  • 如图所示,采用升序排列的方式。以第一个数为基准数,然后与相邻的数进行比较,如果比他大则交换两数的位置,如果第二个数比第一个数小则不交换位置,此时下标移到第二个数的位置,第二个数再和第三个数比较,以此类推,一轮比较下来,此时,最大的数就别移动到了数组的最后了。下一次就比较第一个到倒数第二个数(此时,最大的数已经位于最后面了,无需参与比较了),第二轮的目的是讲第二大的数移动到倒数第二大的位置。 以此类推,可完成升序排序。

  • 可以看出,这个过程就像水中的泡泡从水底浮起的过程。大数慢慢的被交换到后边小数被交换到前边。

  • 当然了,若是降序的话则刚好相反,即将最小的数通过冒泡移动到最后一位。

2.实现代码

void bublesort(int a,int len)
{
	int i,j;
    for(i = 0;i < len-1;i++)	//i代表第几轮比较
    {
        for(j = 0;j <len - 1 - i;j++) //j的取值要注意,每归位一个数,j的最大取值就要减少一位
        {
            if(a[j] > a[j+1])	//若是降序则这里正好相反
            {
                a[j] ^= a[j+1];	// 交换二者的值
                a[j+1] ^= a[j];	
                a[j] ^= a[j+1];
            }
        }
    }
}

3. 总结

  • 冒泡排序算法整体比较简单,只要体会了思想便可以应用到其他很多方面。
  • 同样冒泡排序也可以用来实现字符数组的排序,同整型数组一样。
  • 冒泡排序的空间复杂度为:1 + 2 + 3+… + n - 1 =n * (n - 1) / 2
    度为:1 + 2 + 3+… + n - 1 =n * (n - 1) / 2
  • 时间复杂度为:O(n ^ 2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值