​前言

本文内容源于对《数据结构(C语言版)》(第2版)、王道讲解学习所得心得、笔记整理和总结。

交换排序的基本思想:两两比较待排序记录的关键字,一旦发现两个记录不满足次序要求时则进行交换,直到整个序列全部满足要求为止。

交换排序的主要两种方法:冒泡排序、快速排序

本文内容主要针对冒泡排序

在本文最后的练习的中,以举例子说明该排序方法,配以图文,讲解详细(含408真题)。

本文“干货”较足,建议收藏。

可搭配以下链接一起学习:

【考研】数据结构考点——快速排序(重点,含408真题)_住在阳光的心里的博客-CSDN博客

【考研复习:数据结构】查找(不含代码篇)_住在阳光的心里的博客-CSDN博客

【考研】《数据结构》知识点总结.pdf_考研数据结构知识点总结背诵-其它文档类资源-CSDN文库

【考研】数据结构考点——直接选择排序_住在阳光的心里的博客-CSDN博客

目录

前言

一、冒泡排序(Bubble Sort)的定义

二、算法步骤及代码

(一)算法步骤(此处是升序)

(二)算法代码

三、算法分析及特点

(一)算法分析

(二)算法特点

四、练习


一、冒泡排序(Bubble Sort)的定义

是一种最简单的交换排序方法,它通过两两比较相邻记录的关键字,如果发生逆序,则进行交换,从而使关键字小的记录如气泡一般逐渐往上 “漂浮”(左移),或者使关键字大的记录如石块一样逐渐向下“坠落”(右移)。

二、算法步骤及代码

(一)算法步骤(此处是升序)

1、设待排序的记录存放在数组 r[1..n] 中。

首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序( 即 L.r[1].key > L.r[2].key ),则交换两个记录。然后比较第二个记录和第三个记录的关键字。依次类推,直至第 n - 1 个记录和第 n 个记录的关键字进行过比较为止。

上述过程称作第一趟起泡排序,其结果使得关键字最大的记录被安置到最后一个记录的位置上。

2、然后进行第二趟起泡排序,对前 n - 1 个记录进行同样操作,其结果是使关键字次大的记录被安置到第 n - 1 个记录的位置上。

3、重复上述比较和交换过程,第 i 趟是从 L.r[1] 到 L.r[n-i+1] 依次比较相邻两个记录的关键字,在“逆序”时交换相邻记录,其结果是这 n - i + 1 个记录中关键字最大的记录被交换到第 n - i + 1 的位置上。直到在某一趟排序过程中 有进行过交换记录的操作,说明序列已全部达到排序要求,则完成排序。

(二)算法代码

//对顺序表 L 做冒泡排序
vold BubbleSort (SqList &L){// flag 用来标记某趟排序是否发生交换m = L.length - 1;  flag = 1;    while((m > 0) && (flag == 1)){flag = 0;     //flag置为0,如果本趟排序没有发生交换,则不会执行下趟摔序for (j = 1; j <= m; j++){if(L.r[j].key > L.r[j+1].key){flag = 1;     //flag 置为 1, 表示本趟排序发生了交换//交换前后两个记录t = L.r[j];L.r[j] = L.r[j+1];L.r[j+1] = t;}}--m;}
}

三、算法分析及特点

(一)算法分析

1、时间复杂度

最好情况(初始序列为正序):只需进行一趟排序, 在排序过程中进行 n - 1 次关键字间的比较,且不移动记录。

最坏情况(初始序列为逆序):需进行 n - 1 趟排序,总的关键字比较次数 KCN 和记录移动次数RMN (每次交换都要移动 3 次记录)分别为

所以,在平均情况下,冒泡排序关键字的比较次数和记录移动次数分别约为  和  ,时间复杂度为

2、空间复杂度

冒泡排序只有在两个记录交换位置时需要一个辅助空间用做暂存记录,所以空间复杂度

(二)算法特点

1、稳定排序。

2、可用于链式存储结构

3、移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n 较大时,
此算法不宜采用。

四、练习

1、已知待排序记录的关键字序列为 {49, 38, 65, 97, 76, 13, 27, 49},请给出用冒泡排序法进行排序的过程。

解:如下图。

 待排序的记录总共有 8 个,但算法在第六趟排序过程中没有进行过交换记录的操作,则完成
排序。 排序结果为 r[1..n] = {13, 27, 38, 49, 49, 65, 76, 97}。

2、对 n 个不同的关键字由小到大进行冒泡排序,在下列(   B    )情况下比较的次数最多。

A. 从小到大排列好的                                     B. 从大到小排列好的

C. 元素无序                                                   D. 元素基本有序

3、 对 n 个不同的排序码进行冒泡排序,在元素无序的情况下比较的次数为____。

可以摘取第一题(元素无序)的部分分析图,比较次数在表格最右列。

第一趟排序,一共比较了 n - 1 次。

第二趟排序,一共比较了 n - 2 次。

……

最后一趟比较1次。

则有  

4、 对一组数据(2,12,16,88,5,10)进行排序,若前 3 趟排序结果如下( )

第一趟:2,12,16,5,10,88

第二趟:2,12,5,10,16,88

第三趟:2,5,10,12,16,88

则采用的排序方法可能是(    A    )

A. 冒泡排序                                                   B. 希尔排序

C. 归并排序                                                   D. 基数排序

解:冒泡排序方法,在每趟排序中,均可找到最大或者最小的元素。在本题中,可以每一趟排序中,找到最大元素。

【考研】数据结构考点——冒泡排序(含408真题)相关推荐

  1. 408真题-解析-2014年计算机考研真题解析

    闲鱼:一大颗旺仔牛奶糖 408计算机科学与技术学科联考,考察数据结构,计算机组成原理,操作系统,计算机网络四门课. 408分两部分,80分选择题和70分大题. 选择部分一个题就2分,特别重要!如果40 ...

  2. 2017考研计算机百度云,2017考研计算机统考408真题版.pdf

    2017 年考研计算机统考 408 真题 一. 单项选择题 1. 下列函数的时间复杂度是 1 . int func(int n) { int i = 0; sum = 0; while( sum &l ...

  3. 计算机408试题2014,2014年考研计算机统考408真题

    该文档为本从准备考研期间,收集整理的计算机408考研真题 2014年考研计算机统考408真题 一.单项选择题 1.下列程序段的时间复杂度是 1 . count =0; for(k=1; k<=n ...

  4. 计算机考研408真题(全国统考2009--2020)、985高校计算机考研资料(清北+北理+北邮+武大+华科+浙大+复旦+哈工大+西安交大+华南理工)、王道四件套、天勤四件套---百度网盘免费下载

    1.计算机考研408真题(全国统考2009–2020) 真题 链接:https://pan.baidu.com/s/1uTQd7wScWBk16ShJlyUbgA 提取码:u5vw 答案 链接:htt ...

  5. 2012计算机考研408,2012年考研计算机统考408真题

    2012年考研计算机统考408真题 (10页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 2012年考研计算机统考408真题一. 单项选 ...

  6. 2017计算机考研题型,2017年考研计算机统考408真题.doc

    2017 年考研计算机统考 408 真题 一.单项选择题 1.下列函数的时间复杂度是1. int func(int n) {int i = 0; sum = 0; while( sum < n) ...

  7. 计算机统考408真题text,2017年考研计算机统考408真题

    指导参考范例 2017 年考研计算机统考408 真题 一.单项选择题 1.下列函数的时间复杂度是 1 . int func(int n) { int i = 0; sum = 0; while( su ...

  8. 北师大计算机试题五答案,北京师范大学计算机软件及理论2022考研招生分析、参考书、真题等复习指导解析...

    原标题:北京师范大学计算机软件及理论2022考研招生分析.参考书.真题等复习指导解析 一.院系及专业介绍 北京师范大学信息学科植根于学校百年沃土,经过半个多世纪的发展壮大,现已拥有计算机科学与技术一级 ...

  9. 天勤计算机网络题目pdf百度云,天勤408真题与8套模拟卷PDF打印版

    408真题 天勤408真题2012选择题答案讲解.pdf 天勤408真题2012.pdf 天勤408真题2013选择题答案讲解.pdf 天勤408真题2013.pdf 天勤408真题2014选择题答案 ...

最新文章

  1. 如何在父进程中读取子(外部)进程的标准输出和标准错误输出结果
  2. 如何强制Visual Studio重新生成aspx / ascx文件的.designer文件?
  3. BZOJ4671: 异或图
  4. 《推荐系统实践》样章:如何利用用户标签数据
  5. java dcl 失效解决_DCL失效原因和解决方案
  6. ZOJ 1295——Reverse Text
  7. getDate()返回日期不一致问题引发的bug
  8. 一个小故事,玩转Python-while循环
  9. C语言字符串、字符数组
  10. HTTP Status 500 - 问题
  11. matlab 元胞数组合并(fail)
  12. linux查看网络连接命令,系统运维|使用netstat检测及监测网络连接
  13. IPFS打破传统经济流通特性
  14. nginx重写与重定向区别_nginx学习十一 rewrite url重写以及重定向
  15. c++ 海战棋_编程入门须知:都说零基础不好学编程,那么什么是编程基础?
  16. docker管理神器—kubernetes—直接路由篇
  17. 北京环球度假区宣布首批21家旅游渠道官方授权合作伙伴
  18. 野生二粒小麦基因组在science发布
  19. 你所不知道的互联网那些职业-技术岗
  20. NestedScrollView与Viewpager滑动冲突

热门文章

  1. 1.8 - 多级存储
  2. spark:计算订单中所有商品是否属于套包
  3. 【C语言】小妹不懂指针和数组的关系?那就安排指针数组关系详解
  4. 山东理工大学计算机考研复试分数线,山东理工大学2020考研分数线_山东理工大学2020考研复试分数线 - 考研营...
  5. 一群爱做“傻事”的技术宅
  6. C语言经典实例005:计算正方形的周长
  7. 计算机图形学——生成直线的DDA算法
  8. html 文件上传与移除,WebUploader 解决文件屡次上传和删除上传文件的问题
  9. 计算机网络(二)ensp相关配置命令与实验
  10. 论文阅读:Predicting Dynamic Embedding Trajectory inTemporal Interaction Networks(JODIE模型)