当前课程知识点:数据结构(Data Structures) >  7. Sorting >  7.4 Bubble Sort >  Video

返回《数据结构(Data Structures)》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《数据结构(Data Structures)》慕课在线视频列表

Video课程教案、知识点、字幕

各位同学大家好

我们接下来将学习

另外一种也比较常见的

简单排序算法

冒泡排序算法

所谓的冒泡 Bubble

是这么的一个过程

给定一个数据的序列

我们从最后一个位置开始

不断地进行相邻位置元素的比较

如果后面的元素要小于前面的

我们就进行一次数据的交换

我们来看一个例子

这里最后的元素15

和前面的23比较

因为后面的比前面小

所以我们进行一次交换

然后我们继续这种相邻位置的比较

我们将倒数第二个位置的15

和前面的14继续进行比较

因为后面的要大于等于前面的元素

满足排序的要求

所以不用交换

这个比较要继续下去

只要后面的元素比前面的小

我们要进行交换

直到最开始的两个元素

进行比较操作

这样一个从后往前相邻位置元素

进行比较和交换的过程

我们就称为

一个数据冒泡的过程

那么为什么叫冒泡呢

因为我们留意到

经过这样的一个过程之后

在一组数据中

最小的那个元素被交换到了

最前面的位置

这个最小的元素

在进行相邻位置比较的时候

总是会被交换到前面的位置

它一直会被交换到最前面的位置

这个最小的元素

就从序列中冒出来了

当然了 我们可以看到

经过一次冒泡之后

我们还是无法实现所有数据的排序的

所以我们可以想到

应该是需要多次冒泡

实际上我们通过N-1次冒泡

就可以实现这个排序的过程

为了方便分析

我们为每次冒泡

分配了一个序号

变量i记录了冒泡的序号

通过第一次冒泡

这个15会被交换到23的前面

14会被交换到28的前面

13会被交换到最前面

最小的元素13

经过一次冒泡之后

被交换到0号位置上

我们如果对这个序列

再一次进行冒泡

那么除了13之外

剩下的元素最小值14

将会被交换到1号位置

在经过一次冒泡

我们就会把剩下元素里面

最小的元素调整到

正确的排序位置上面去

经过N-1次类似这样的冒泡过程

所有的元素将会处在于

正确的位置上面

所以冒泡排序的过程非常简单

就是这样的一个N-1次

从后往前的冒泡过程

下面我们来看一下

冒泡排序算法的具体实现

这里的bubsort函数

它有两个参数

第一个是存放数据的数组A

第二个是数组中的元素个数N

因为我们需要N-1次冒泡

所以这里我们采用一个

执行N-1次的for循环

其中迭代变量i

它的取值范围是从0到N-2

在第二次冒泡的过程中

我们将会把数组中的

排行第i的元素

将它冒出来了

并且交换到i号位置上面去

为了实现这个冒泡

我们需要从后往前

进行相邻位置元素的比较

for循环来实现

这里迭代变量j

表示当前比较的位置

取值范围是从最后的位置N-1

到前面的i+1

每次我们将j位置的元素

和前面的j-1次的元素进行比较

如果后面的比前面的小

我们就被把这两个元素

进行一个交换

经过N-1次的冒泡之后

我们就得到了一个排好序的序列

下面我们来分析一下

冒泡排序它的算法复杂度

冒泡排序的过程是比较简单的

核心部分是由一个两层for循环来构成的

循环执行的次数

和序列中的数据的分布是没有关系的

只是和数据的个数N有关系

因此我们可以推导出来

冒泡排序它的算法复杂度

在最好的情况

最差的情况以及平均的情况下

都是O(n^2)

下面我们来分析一下

冒泡排序它的稳定性

我们通过一个例子

来去做稳定性的分析

在这个数组中有两个关键字

都是等于13的

我们用不同的颜色来进行区分

首先我们进行第一次冒泡

从后往前相邻位置的元素进行比较

因为15比23要小

所以进行交换

然后15和13进行比较

不用交换

13和28比较 要交换

这个时候两个13挨在了一起

两个13进行比较的时候

因为后面的13要大于等于

前面的13

那是满足序的要求的

所以不用交换

因此这两个13

它的先后顺序并没有发生改变

后面的13它不会超过前面的13

而跑到前面去

继续这个冒泡的过程

最终黑色的13

冒到了最前面

然后进行第二轮冒泡

红色的13将会出现在第二个位置

它也不会超过前面的黑色的13

我们可以看出

由于冒泡的排序过程中

总是相邻位置的元素

进行比较和交换

所以具有相同值的这些关键字

他们的先后位置不会发生变化

因此我们说冒泡排序

它是一种稳定的排序算法

我们最后把前面

所学习到的3个简单排序算法

进行一个对比

在大多数的情况下

插入排序 冒泡排序和选择排序

它们算法的复杂度

都是O(n^2)的平方

是一类相对比较慢的排序算法

但是也有一种情况

它是例外的

也就是说在最好的情况下

插入排序它是很快的

可以在O(n)的时间内完成

需要排序的序列

它越是接近有序的状态

那么插入排序

它的性能就会越接近这个O(n)

这一点可以被用来去创建

更加优化的算法

我们在后面将会学习到

更多的相关知识

这节课我们就讲到这里

下节课我们再见

数据结构(Data Structures)课程列表:

1. Introduction

-1. Introduction--1.1 Introduction of Data

-1.1 Introduction of Data Structure

--Introduction of Data Structure

-1.2 Data Structure and A

-1.2 Data Structure and Algorithm

--Video

-1.3 Asymptotic Analysis

-1.3 Asymptotic Analysis

--Video

-1.4 Simplifying Rules of

-1.4 Simplifying Rules of Asymptotic Analysis

--Video

2. List

-2.1 Introduction of List

-2.1 Introduction of List

--Video

-2.2 Array based List

-2.2 Array based List

--Video

-2.3 Insertion Operation on Array

-2.3 Insertion Operation on Array based List

--Video

-2.4 Remove Operation on Array based List

-2.4 Remove Operation on Array based List

--Video

-2.5 Linked list

-2.5 Linked list

--Video

-2.6 Insertion Operation on Linked list

-2.6 Insertion Operation on Linked list

--Video

-2.7 Remove Operation on Linked list

-2.7 Remove Operation on Linked list

--Video

-2.8 SetPos Operation on Linked list

-2.8 SetPos Operation on Linked list

--Video

-2.9 Stack

-2.9 Stack

--Video

-2.10 Application of Stack

--Video

-2.11 Queue

-2.11 Queue

--Video

3. Tree

-3.1 Definition of Binary Tree

-3.1 Definition of Binary Tree

--Video

-3.2 Implementation of Binary Tree

-3.2 Implementation of Binary Tree

--Video

-3.3Traversal

-3.3 Traversal

--Video

-3.4 Binary Search Tree

-3.4 Binary Search Tree

--Video

-3.5 Search on BST

-3.5 Search on BST

--Video

-3.6 Insertion on BST

-3.6 Insertion on BST

--Video

-3.7 Introduction of Heap

-3.7 Introduction of Heap

--Video

-3.8 Construction of Heap

-3.8 Construction of Heap

--Video

-3.9 Operations on Heap

--Video

-3.10 General Tree

--Video

4. Search

-4.1 Definition of Searching

--Video

-4.2 Searching of Sorted Array

-4.2 Searching of Sorted Array

--Video

-4.3 Definition of Hash Table

--Video

-4.4 Collision in Hash Table

-4.4 Collision in Hash Table

--Video

-4.5 Extension of Linear Probing

--Video

-4.6 Insertion Operation of Hash Table

--Video

-4.7 Search Operation of Hash Table

-4.7 Search Operation of Hash Table

--Video

5. Index

-5.1 Introduction of Index

--Video

-5.2 Linear Index

-5.2 Linear Index

--Video

-5.3 2-3 tree index

-5.3 2-3 tree index

--Video

-5.4 Implementation of 2-3 tree

-5.4 Implementation of 2-3 tree

--Video

-5.5 B-Tree

-5.5 B-Tree

--Video

-5.6 Insertion Operation on B+ Tree

--Video

-5.7 Deletion Operation on B+ Tree

--Video

6. Graph

-6.1 Definition of Graph

--Video

-6.2 Implementation of Graph

--Video

-6.3 Adjacency Matrix

--Video

-6.4 Adjacency List

--Video

-6.5 Graph Traversal - DFS

--Video

-6.6 Graph Traversal - BFS

--Video

-6.7 Topological Sort

--Video

-6.8 Shortest Path Problem

--Video

-6.9 Single Source Shortest Path

--Video

-6.10 Dijkstra Algorithm

--Video

7. Sorting

-7.1 Sorting Problem

--Video

-7.2 Insertion Sort

--Video

-7.3 Selection Sort

--Video

-7.4 Bubble Sort

--Video

-7.5 Shell Sort

--Video

-7.6 Quick Sort

--Video

-7.7 Heap Sort

--Video

-7.8 Comparison

--Video

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。