冒泡排序算法

简介: 冒泡排序算法

冒泡排序算法

冒泡排序

什么是冒泡排序呢?冒泡排序的英文名称是Bubble Sort,Bubble的发音跟我们吐泡泡的声音很相近。那么这个排序算法为什么会取名为冒泡排序呢?
其实来自于我们日常中的一种现象,我们都可以发现在可乐中有很多的小气泡其实也就是二氧化碳,由于这些二氧化碳比水轻,所以这些小气泡会不断的往上冒,而我们这种排序算法中的元素,和这些小气泡一样,会根据自身的大小,在数列中进行移动。


那么我们知道冒泡排序这个名字的来源了,那么冒泡排序的原理是什么呢?


冒泡排序的实现原理:它会重复扫描需要排序的元素列,并比较相邻的元素,当相邻的两个元素顺序错误的时候会交换位置,一直重复这个过程,直到没有相邻元素需要交换为止,也就是说该元素列已经排序完成了。


接下来我们来看一看例子:

实例

有这样七个数,组成了一个无序数列2,5,3,2,8,6,8。希望按照从小到大进行排序。根据冒泡排序的实现原理,我们进行两两比较并交换顺序,具体的实现过程。
待排数列:2,5,3,2,8,6,8


第一轮排序:


第一次比较 2,5,3,2,9,6,8————2,5,3,2,9,6,8

第二次比较2,5,3,2,9,6,8————2,3,5,2,9,6,8

第三次比较2,3,5,2,9,6,8————2,3,2,5,9,6,8

第四次比较2,3,2,5,9,6,8————2,3,2,5,9,6,8

第五次比较2,3,2,5,9,6,8————2,3,2,5,6,9,8

第六次比较2,3,2,5,6,9,8————2,3,2,5,6,8,9

通过第一轮排序我们选出来了,一个最大的数9.


那么第二轮排序只需要进行五次比较

第二轮排序结果:2,2,3,5,6,8,9。这个时候我们发现数列已经按照从小到大进行了排序,已经没有相邻元素可以进行交换的了,那么排序就已经结束了。


如果按照最坏的情况,冒泡排序一共要进行(n-1)次循环,每一次循环都要进行当前n-1次比较

所以一共的比较次数是:

(n-1) + (n-2) + (n-3) + … + 1 = n*(n-1)/2;

这儿就涉及到了时间复杂度的问题,我么你下面来看一看什么是时间复杂度。

时间复杂度

什么是时间复杂度呢?通俗说时间复杂度就是你做完一件事情理论上需要的时间。放到算法中来讲考虑的是当输入项为无穷大时,该算法运行的时间。

例如:

现在David有一本书,总共300页,David每天看30页,那么看完这一本书需要多少天?
通过简单的计算300/30=10天。

那如果说书本的页数是N?

那么看完这本书需要的天数就是N/30天

用一个函数表达式来表达这个相对时间的话,T(N)=N/30.


同样的道理,我们运用到冒泡排序中,在一个元素个数为n的数列中,进行冒泡排序的次数为(n-1) + (n-2) + (n-3) + … + 1 = n*(n-1)/2;

那么到n趋近于无穷大的时候,冒泡排序的时间复杂度为O(n2)。

JavaScript代码 冒泡排序

<script type="text/javascript">
      //申明一个数组
      var arr=[2,1,3];
      οnlοad=function(){
        //冒泡排序,从小到大
        for(var i=0;i<arr.length-1;i++){
          for(var j=0;j<arr.length-1-i;j++){
            if(arr[j]-arr[j+1]>0){
              var t=arr[j];
              arr[j]=arr[j+1];
              arr[j+1]=t;
            }
          }
        }
        alert(arr);   
      };
    </script>
目录
相关文章
|
2月前
|
搜索推荐
冒泡排序算法
【10月更文挑战第19天】冒泡排序是一种基础的排序算法,虽然在实际应用中可能不是最优的选择,但对于理解排序算法的基本原理和过程具有重要意义。
|
2月前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
21 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
2月前
|
搜索推荐 算法 数据可视化
深入解析冒泡排序算法
深入解析冒泡排序算法
42 4
|
2月前
|
搜索推荐 C语言
排序算法--冒泡排序
排序算法--冒泡排序
16 0
|
2月前
|
存储 搜索推荐 算法
【排序算法(二)】——冒泡排序、快速排序和归并排序—>深层解析
【排序算法(二)】——冒泡排序、快速排序和归并排序—>深层解析
|
2月前
|
算法 Python
Python算法编程:冒泡排序、选择排序、快速排序
Python算法编程:冒泡排序、选择排序、快速排序
27 0
|
4月前
|
搜索推荐 Java
经典排序算法---冒泡排序
这篇文章详细介绍了冒泡排序算法的基本思想、比较轮数和次数,并提供了Java语言实现冒泡排序的代码示例,展示了如何通过相邻元素的比较和交换来达到排序的目的。
经典排序算法---冒泡排序
|
5月前
|
算法 PHP
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
34 1
|
6月前
|
搜索推荐 算法 大数据
​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
|
6月前
|
机器学习/深度学习 搜索推荐 算法
【C/排序算法】:快速排序和冒泡排序
【C/排序算法】:快速排序和冒泡排序
39 0