IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【考研】数据结构考点——冒泡排序(含408真题) -> 正文阅读

[数据结构与算法]【考研】数据结构考点——冒泡排序(含408真题)

?前言

?本文内容源于对《数据结构(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 次记录)分别为

所以,在平均情况下,冒泡排序关键字的比较次数和记录移动次数分别约为?\frac{n^2}{4} 和?\frac{3n^2}{4}?,时间复杂度为 O(n^2)

2、空间复杂度

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

(二)算法特点

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 个不同的排序码进行冒泡排序,在元素无序的情况下比较的次数为__\frac{n(n-1)}{2}__。

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

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

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

……

最后一趟比较1次。

则有??(n-1)+(n-2)+...+1= \frac{n(n-1)}{2}

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. 基数排序

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

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:31:09  更:2022-08-19 19:32:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 4:31:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码