C语言——冒泡排序法

Posted 智链IT Club

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言——冒泡排序法相关的知识,希望对你有一定的参考价值。

冒泡排序法

冒泡

C语言——冒泡排序法
C语言——冒泡排序法


     

简介

   冒泡排序Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。



0 1
第一趟排序

从最简单开始,首先我们创建一个数组,该数组有5位数字:

C语言——冒泡排序法

下面我们根据算法的描述来进行代码验算(第一趟排序):

C语言——冒泡排序法

C语言——冒泡排序法


排序~

    如果前一位的数比后一位的数要大,那么就交换,直到将数组的所有元素都比较了一遍!

   经过我们第一趟比较,我们可以发现:最大的值就在数组的末尾啦!


C语言——冒泡排序法


0 2
第二趟排序

第二趟~

     第二趟排序跟第一趟排序一样,也是用前一位与后一位比较,如果前一位比后一位要大,那就交换。值得注意的是:并不需要与最后一位比较了,因为在第一趟排序完了,最后一位已经是最大的数了。同理,我们第二趟排序完了之后,倒数第二位也是第二大的数了。


第二趟排序的代码如下:

C语言——冒泡排序法


结果:我们的第二大数已经排在了倒数第二位了!

C语言——冒泡排序法


0 3
代码简化

第三步~

    值得说明的是:上面的结果看起来已经是排序好的了,其实是我在测试时数据还不足够乱,如果数据足够乱的话,是需要4(n-1)趟排序的!

   但我们从上面的代码就可以发现:第一趟和第二趟的比较、交换代码都是重复的,并且我们的比较都是写死的(0,1,2,3,4),并不通用!

我们的数组有5位数字

第一趟需要比较4次

第二趟需要比较3次

我们可以根据上面规律推断出:

第三趟需要比较2次

第四趟需要比较1次

    再从上面的规律可以总结出:5位数的数组需要4躺排序的,每躺排序之后次数减1(因为前一趟已经把前一趟数的最大值确定下来了)!

     于是我们可以根据for循环和变量将上面的代码进行简化:


C语言——冒泡排序法


0 4
冒泡排序优化


在优化~

    从上面的例子我们可以看出来,如果数据足够乱的情况下是需要经过4趟比较才能将数组完整排好序。但是我们在第二趟比较后就已经得到排好序的数组了。     但是,我们的程序在第二趟排序后仍会执行第三趟、第四趟排序。这是没有必要的,因此我们可以对其进行优化一下:

    如果在某趟排序中没有发生交换位置,那么我们可以认为该数组已经排好序了。

    这也不难理解,因为我们每趟排序的目的就是将当前趟最大的数置换到对应的位置上,没有发生置换说明就已经排好序了。


代码如下:

C语言——冒泡排序法

C语言——冒泡排序法


0 5
个人建议


推荐两个视频学习网站

慕课网

  第一个推荐的学习网站应该是慕课网,在我初学的时候,这个网站对我的帮助挺大的,里面有很多免费的课程,也有很多付费的课程。如果你没有特殊的需求,一般免费课程就够自己学的了。

哔哩哔哩

    想不到弹幕追番/原创视频小站也被推荐了吧!不得不说哔哩哔哩上面的学习资源还是很多的,现在有很多年轻人都在上面学习呢!哈哈哈 大部分年轻人最爱的小破站可是受到过央视表扬的。被誉为年轻人学习的首要阵地,哔哩哔哩干杯!

06
总结

知道要学什么之后,如何去学呢?

每个知识点可以考虑这样去入手:

官网(大概率是英文,不推荐初学者看)。

书籍(知识更加系统完全,推荐)。

视频(比较容易理解,推荐,特别是初学的时候。慕课网和哔哩哔哩上面有挺多学习视频可以看,只直接在上面搜索关键词就可以了)。

网上博客(解决某一知识点的问题的时候可以看看)。

这里给大家一个建议,看视频的过程中最好跟着一起练,要做笔记!!!

最好可以边看视频边找一本书籍看,看视频没弄懂的知识点一定要尽快解决,如何解决?

首先百度/Google,通过搜索引擎解决不了的话就找身边的朋友或者认识的一些人。另外,一定要进行项目实战!很多人这时候就会问没有实际项目让我做怎么办?我觉得可以通过下面这几种方式:

C语言——冒泡排序法
  1. 在网上找一个符合自己能力与找工作需求的实战项目视频或者博客跟着老师一起做。做的过程中,你要有自己的思考,不要浅尝辄止,对于很多知识点,别人的讲解可能只是满足项目就够了,你自己想多点知识的话,对于重要的知识点就要自己学会去往深处学。

  2. Github或者码云上面有很多实战类别项目,你可以选择一个来研究,为了让自己对这个项目更加理解,在理解原有代码的基础上,你可以对原有项目进行改进或者增加功能。

  3. 自己动手去做一个自己想完成的东西,遇到不会的东西就临时去学,现学现卖(这种方式比较难,初学不推荐用这种方式,因为你脑海中没有基本的概念,写出来的代码一般会很难或者根本就做不出来一个像样的东西)。

C语言——冒泡排序法


   划重点——做项目不光要做,还要改进,改善。另外,如果你的老师有相关 Java 后台项目的话,你也可以主动申请参与进来。

  一定要学会分配自己时间,要学的东西很多,真的很多,搞清楚哪些东西是重点,哪些东西仅仅了解就够了。一定不要把精力都花在了学各种框架上,算法和数据结构真的很重要!


"
今天的分享就到这里啦~祝大家圣诞节快乐噢 Merry Christmas!!
"
智链IT Club

解决30万

长安国际大学城学生

学习中的各种疑难杂症!关注我,准没错!







以上是关于C语言——冒泡排序法的主要内容,如果未能解决你的问题,请参考以下文章

c++冒泡排序法

冒泡排序法

c语言冒泡排序法代码一直排序错误,有时只能排前两个,不明白原因,请问究竟哪里写错了,谢谢!

C语言——如何有效记忆冒泡排序法?

C语言——冒泡排序法

二级C语言排序技术2