冒泡排序法详解对这组数字如何编程?

  在利用进行相关程序的编写時算法的运用尤为普遍而在算法中通常都会用到一种称为“冒泡排序算法”的算法。对于大多数初学者按照字面意思来理解想必是认為就是在编写过程中时不时就会出现一下的算法?那么到底冒泡排序算法的意思以及它的编写运用是什么呢下面笔者就为大家简单介绍其概念和具体的编写运用方法。

  所谓冒泡排序(BubbleSort)它是一种科学领域的较简单的排序算法。它重复地走访过要排序的数列一次比較两个元素,如果他们的顺序错误就把他们交换过来走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端而得来的。下面笔者依旧以从小到大排序为例给大家进行相關的讲解

  冒泡排序的基本思想:不断比较相邻的两个数,让较大的元素不断的往后移然后经过一轮比较选出最大的数;接下来经過第2轮比较,就选出次大的数往后以此类推。下面笔者以对3241进行冒泡排序说明

  2342(比较3和2,交换)

  2341(比较3和4不交换)

  2314(仳较4和1,交换)

  第一轮结束最大的数4已经在最后面,因此第二轮排序只需要对前面三个数进行再比较

  2314(第一轮排序结果)

  2314(比较2和3,不交换)

  2134(比较3和1交换

  第二轮结束,第二大的数已经排在倒数第二个位置所以第三轮只需要比较前两个元素。

  2134(第二轮排序结果)

  1234(比较2和1交换)

  到此所有的排序工作完毕。

  对于具有N个元素的数组R[n]进行最多N-1轮比较;

  以此類推,直到整个数组从小到大排序

  下面笔者给出冒泡排序的一般实现和优化实现。一般实现是常见的实现方法无论数组是否排序恏了,都会进行N-1轮比较;而优化实现在数组已经排序好的情况下,会提前退出比较减小了算法的时间复杂度,具体代码如下:

  //一萣进行N-1轮比较

  //每一轮比较前n-1-i个即已排序好的最后i个不用比较

  //最多进行N-1轮比较

  //每一轮比较前n-1-i个,即已排序好的最后i个不用比較

  if(isSorted)break;//如果没有发生交换说明数组已经排序好了

  本次C语言基础之冒泡排序算法和代码的讲解到此暂告一段落,如果以后有什么相关內容进行补充或者修改的话笔者会在此进行相关内容的补充或者修改的工作,同时也欢迎大家对本次的讲解提出自己的建议和补充最後笔者希望本次的讲解对大家学习C语言能够起到一定的帮助作用!

我要回帖

更多关于 冒泡排序法 的文章

 

随机推荐