0
点赞
收藏
分享

微信扫一扫

数据结构基础:P9.1-排序(一)--->简单排序(冒泡、插入)

本系列文章为浙江大学陈越、何钦铭数据结构学习笔记,前面的系列文章链接如下
数据结构基础:P1-基本概念
数据结构基础:P2.1-线性结构—>线性表
数据结构基础:P2.2-线性结构—>堆栈
数据结构基础:P2.3-线性结构—>队列
数据结构基础:P2.4-线性结构—>应用实例:多项式加法运算
数据结构基础:P2.5-线性结构—>应用实例:多项式乘法与加法运算-C实现
数据结构基础:P3.1-树(一)—>树与树的表示
数据结构基础:P3.2-树(一)—>二叉树及存储结构
数据结构基础:P3.3-树(一)—>二叉树的遍历
数据结构基础:P3.4-树(一)—>小白专场:树的同构-C语言实现
数据结构基础:P4.1-树(二)—>二叉搜索树
数据结构基础:P4.2-树(二)—>二叉平衡树
数据结构基础:P4.3-树(二)—>小白专场:是否同一棵二叉搜索树-C实现
数据结构基础:P4.4-树(二)—>线性结构之习题选讲:逆转链表
数据结构基础:P5.1-树(三)—>堆
数据结构基础:P5.2-树(三)—>哈夫曼树与哈夫曼编码
数据结构基础:P5.3-树(三)—>集合及运算
数据结构基础:P5.4-树(三)—>入门专场:堆中的路径
数据结构基础:P5.5-树(三)—>入门专场:File Transfer
数据结构基础:P6.1-图(一)—>什么是图
数据结构基础:P6.2-图(一)—>图的遍历
数据结构基础:P6.3-图(一)—>应用实例:拯救007
数据结构基础:P6.4-图(一)—>应用实例:六度空间
数据结构基础:P6.5-图(一)—>小白专场:如何建立图-C语言实现
数据结构基础:P7.1-图(二)—>树之习题选讲:Tree Traversals Again
数据结构基础:P7.2-图(二)—>树之习题选讲:Complete Binary Search Tree
数据结构基础:P7.3-图(二)—>树之习题选讲:Huffman Codes
数据结构基础:P7.4-图(二)—>最短路径问题
数据结构基础:P7.5-图(二)—>哈利·波特的考试
数据结构基础:P8.1-图(三)—>最小生成树问题
数据结构基础:P8.2-图(三)—>拓扑排序
数据结构基础:P8.3-图(三)—>图之习题选讲-旅游规划

文章目录


前言

什么是排序呢?我相信这个不用我废话你肯定知道。如果我们讨论的是把十几二十个数按照从小到大的顺序排好,那么一个幼儿园的小朋友如果他识数,并且他知道什么是大什么是小,那么小朋友也可以做这件事情。如果我们在这要讨论的是10000个数据起步的规模的排序,那么排序算法的效率就变得非常的重要。

在介绍各种排序算法之前,我们先来讲清楚几个前提条件


一、冒泡排序

假设我们有这么一堆的泡泡,我们的目标是要把那个最小的泡泡排在最上面,最大的泡泡排在最下面。

对应代码如下:

void Bubble_Sort( ElementType A[], int N ) 
{ 
 //控制循环次数,每次要遍历的泡泡依次少一个
	for ( P=N-1; P>=0; P-- ){
		flag = 0; //标记是否发生了交换
		for( i=0; i<P; i++ ) { /* 一趟冒泡 */
			if ( A[i] > A[i+1] ) {
				Swap(A[i], A[i+1]); 
				flag = 1; /* 标识发生了交换 */
			}
		}
		if ( flag==0 ) break; /* 全程无交换,直接跳出,已经有序 */
	}
}

算法复杂度:

冒泡排序的优缺点:


二、插入排序

另外一个非常简单的排序算法叫做插入排序。插入排序可以理解为我们怎么抓一手牌。

对应代码如下:

void Insertion_Sort( ElementType A[], int N ) 
{ 
	//从1开始,默认我们有第一张牌
	for ( P=1; P<N; P++ ) { 
		Tmp = A[P]; /* 摸下一张牌 */
		for ( i=P; i>0 && A[i-1]>Tmp; i-- ) 
			A[i] = A[i-1]; /* 移出空位 */
		A[i] = Tmp; /* 新牌落位 */
	}
}

算法复杂度:

例子:


三、时间复杂度下界

冒泡排序和插入排序都属于简单排序,它们都有公共的时间复杂度下界。要理解这个问题,我们先介绍一个新的概念:逆序对

逆序对:

问题:

插入排序的时间复杂度:

对于更一般的情况,我们有下面这样的定理:

举报

相关推荐

0 条评论