冒泡排序算法实例详解

1.复杂度与稳定性

算法时间复杂度

最坏情况:O(n^2)

最好情况:O(n)

平均情况:O(n^2)

空间复杂度:S(n)=O(1)

稳定性:稳定排序

2.过程介绍(以顺序为例)

1.从第一个元素开始逐个比较相邻的元素。如果第一个比第二个大(a[1]>a[2]),就交换他们两个。

2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。此时在这一点,最后的元素应该会是最大的数,我们也称呼一遍这样的操作为:一趟冒泡排序。

3.针对所有的元素重复以上的步骤,每一趟冒泡排序的最大值已放在最后,下一次操作则不需要将此最大值纳入计算计算。

4.持续对每次对越来越少的元素,重复上面的步骤,直到没有任何一对数字需要比较,即完成冒泡排序。

3.图示过程

以数组数据{ 70,50,30,20,10,70,40,60}为例:

开始数据 70 50 30 20 10 70 40 60
第一趟 50 30 20 10 70 40 60 70
第二趟 30 20 10 50 40 60 70 70
第三趟 20 10 30 40 50 60 70 70
第四趟 10 20 30 40 50 60 70 70
第五趟 10 20 30 40 50 60 70 70
第六趟 10 20 30 40 50 60 70 70
第七趟 10 20 30 40 50 60 70 70

如此图,每一次排序结尾,总有一个最大的数被放在了最后,然后这个趋势逐渐往前,但是,到了第四趟的时候,其实我们整个数据已经排序结束了,但是此时我们的程序还在进行,直到第5,6,7趟结束程序才算真正的结束,这其实是一种浪费算力的表现。

4.相关的代码

#include<iostream>
using namespace std;
void bubble_sort(int a[],int n) {for(int i=0; i<n; i++) {for(int j=0; j<n-i; j++) {if(a[j]>a[j+1]) {swap(a[j],a[j+1]);  //交换数据}}}
}int main() {int a[8]= {70,50,30,20,10,70,40,60};int n=7;bubble_sort(a,n);for(int i=0; i<=n; i++) {cout<<a[i]<<' ';}return 0;
}

在这里提示一下,由于C++的namespace std命名空间的使用,std自带了交换函数swap(a,b),我们可以直接使用,其功能是交换a与b的两个值,在教程后面的排序中会经常用到,当然你可以自定义swap函数,其模板代码为:

template<class T> //模板类,可以让参数为任意类型

void swap(T &a,T &b) {

T c(a);

a=b;

b=c;

}

或者指定类型修改为整形,如:

void swap(int &a, int &b) { //指定类型int temp = a;a = b;b = temp;
}

那么我们的冒泡排序就算学完了,其实冒泡排序是八大排序中最简单及基础的排序,这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

冒泡排序算法实例详解相关推荐

  1. html5走格子游戏,JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解

    JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解 发布时间:2020-09-26 20:42:24 来源:脚本之家 阅读:112 作者:krapnik 本文实例讲述了JS/HTML5游戏常 ...

  2. Manacher算法 , 实例 详解 . NYOJ 最长回文

    51 Nod http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1089 Manacher 算法 定义数组 p[i]表示以i为 ...

  3. python如何调用文件进行换位加密_python 换位密码算法的实例详解

    python 换位密码算法的实例详解 一前言: 换位密码基本原理:先把明文按照固定长度进行分组,然后对每一组的字符进行换位操作,从而实现加密.例如,字符串"Error should neve ...

  4. java二分查找法_java算法之二分查找法的实例详解

    java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...

  5. JAVA中希尔排序去的讲解_java 中基本算法之希尔排序的实例详解

    java 中基本算法之希尔排序的实例详解 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shel ...

  6. python实现冒泡排序完整算法_利用python实现冒泡排序算法实例代码

    利用python实现冒泡排序算法实例代码 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数 ...

  7. python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...

    本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...

  8. python类是实例的工厂_Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...

  9. python装饰器函数-Python函数装饰器常见使用方法实例详解

    本文实例讲述了Python函数装饰器常见使用方法.分享给大家供大家参考,具体如下: 一.装饰器 首先,我们要了解到什么是开放封闭式原则? 软件一旦上线后,对修改源代码是封闭的,对功能的扩张是开放的,所 ...

最新文章

  1. autograd库测试笔记-(一个基于Numpy的自动求导库)
  2. P6 根轨迹分析法-《Matlab/Simulink与控制系统仿真》程序指令总结
  3. groovy怎样从sql语句中截取表名_《SQL基础教程》学习笔记
  4. 计算机和网络老是断开,电脑插上网线还是显示断开连接怎么办
  5. 有没有什么好的C++视频教程?
  6. 21 MM配置-采购-定义采购组
  7. 标准日本语 05_003
  8. 最近公共祖先 python_lintcode :最近公共祖先
  9. 【gitee】fatal: unable to access ‘https://username:password@gitee.com: Port number ended with ‘l‘
  10. ACM/IOI 历年国家集训队论文集和论文算法分类整理
  11. oracle导出导入同义词,oracle同义词语句备份
  12. 东大22春领导科学与决策X《领导科学与决策》在线平时作业3百分非答案
  13. java 反应堆模式_Java NIO 反应堆模式
  14. 叫谁修猫呢?叫蓝总|ONES 人物
  15. 【习题5】用Python完成新建文档写古诗+复制
  16. 关于轩辕剑3外传 swd3eDvd.exe报错问题
  17. webRTC(二十四):web远程多台android的实现
  18. Java模拟售票窗口代码_java多线程模拟售票,多个窗口售票
  19. 【图像融合】基于随机游走算法实现多焦点图像融合含Matlab代码
  20. FCF中地址控制域设定值对帧中所包含地址的影响

热门文章

  1. TIA博途Wincc中如何组态面板功能键F1-F8?
  2. 通过示例了解Vue过渡和动画
  3. 08-18 三十分钟的反弹
  4. Objective-C学习笔记第十五章文件加载与保存
  5. DPDK 中国峰会的日程安排新鲜出炉
  6. 卧槽!算法岗又爆了!
  7. page grid 布局
  8. display:grid的一些笔记
  9. UVa 136 - Ugly Numbers
  10. 劫持软件是什么意思,详细讲解http劫持软件