冒泡排序算法

简介: 冒泡排序算法

冒泡排序算法

冒泡排序

什么是冒泡排序呢?冒泡排序的英文名称是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>
目录
相关文章
|
8月前
|
搜索推荐 算法 Go
Go语言数组排序(冒泡排序法)—— 用最直观的方式掌握排序算法
本案例介绍使用冒泡排序对整数数组进行升序排序的实现方法,涵盖输入处理、错误检查与排序逻辑。通过代码演示和算法解析,帮助理解排序原理及Go语言切片操作,为学习更复杂排序算法打下基础。
|
8月前
|
搜索推荐
冒泡排序与其它排序算法比较
本内容比较了冒泡排序、选择排序和插入排序的特性。三者时间复杂度均为O(n²),但交换次数和稳定性不同。冒泡排序稳定,交换次数多,可优化至O(n);选择排序不稳定,交换次数少;插入排序交换次数最少,且二者均为稳定排序。对于有序数组,冒泡和插入可优化提升效率。
155 0
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
314 67
|
搜索推荐
冒泡排序算法
【10月更文挑战第19天】冒泡排序是一种基础的排序算法,虽然在实际应用中可能不是最优的选择,但对于理解排序算法的基本原理和过程具有重要意义。
|
搜索推荐 算法 数据可视化
深入解析冒泡排序算法
深入解析冒泡排序算法
269 5
|
搜索推荐
冒泡排序(Bubble Sort)以及选择排序(Selection Sort)和快速排序(Quick Sort)详细解析
冒泡排序(Bubble Sort)以及选择排序(Selection Sort)和快速排序(Quick Sort)详细解析
295 1
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
532 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
搜索推荐 C语言
排序算法--冒泡排序
排序算法--冒泡排序
132 0
|
存储 搜索推荐 算法
【排序算法(二)】——冒泡排序、快速排序和归并排序—>深层解析
【排序算法(二)】——冒泡排序、快速排序和归并排序—>深层解析
|
算法 Python
Python算法编程:冒泡排序、选择排序、快速排序
Python算法编程:冒泡排序、选择排序、快速排序
214 0