归并交换基数简单选择排序

这篇具有很好参考价值的文章主要介绍了归并交换基数简单选择排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 交换排序

基本思想就是:两两进行比较,如果发生逆序则进行交换,直到所有的记录都排好为止。
常见的交换排序方法:

  • 冒泡排序 O ( n 2 ) O(n^2) O(n2)
  • 快速排序 O ( n l o g 2 n ) O(nlog_2n) O(nlog2n)

1.1 冒泡排序

冒泡排序就是基于简单的交换思想。每趟不断将记录两两比较,并按前小后大规则交换。
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

一些结论:

  • n n n个记录,总共需要 n − 1 n-1 n1
  • m m m趟需要比较 n − m n-m nm

1.1.1 冒泡排序算法

void bubble_sort(SqList &L)//冒泡排序算法
{
	int m,i,j;
	RedType x;//交换时临时存储
	for(m=1; m<=n-1; ++m)//总共需要m趟
	{
		for(j=1; j<=n-m; ++j)//交换需要n-m次
		{
			if (L.r[j].key > L.r[j+1].key)
			//两个相邻元素进行比较
			//发生逆序
			{
				x = L.r[j];
				L.r[j] = L.r[j+1];
				L.r[j+1] = x;//交换
			}
		}
	}
}

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
已经排好序后,就无需做无用的交换了。

算法的改进:

void bubble_sort(SqList &L)//冒泡排序算法
{
	int m,i,j;flag = 1;//flag作为是否交换的标记
	RedType x;//交换时临时存储
	for(m=1; m<=n-1 && flag==1; ++m)//总共需要m趟
	{
		flag = 0;
		for(j=1; j<=n-m; ++j)//交换需要n-m次
		{
			if (L.r[j].key > L.r[j+1].key)
			//两个相邻元素进行比较
			//发生逆序
			{
				flag = 1;//发生交换,flag置为1
				x = L.r[j];
				L.r[j] = L.r[j+1];
				L.r[j+1] = x;//交换
			}
		}
	}
}

1.1.2 性能分析

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

1.2 快速排序

基本思想:任意取一个元素,如第一个元素,为中心。
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
采用递归的思想,结束条件是子表只剩一个元素。
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

  • 基本思想: 通过一趟排序,将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录进行排序,以达到整个序列有序。

  • 具体实现: 选定一个中间数作为参考,所有元素与之比较,小的调到其左边,大的调到其右边。

  • (枢轴)中间数: 可以是第一个数、最后一个数、最中间一个数、任选一个数等。

1.2.1 快排的算法

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

1.2.2 性能分析

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

1.2.3 快排的特点

  1. 每一趟的子表的形成是采用从两头向中间交替式逼近法
  2. 由于每趟中对各子表的操作都相似,可采用递归算法
  3. 快排是个不稳定的算法

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

2 简单选择排序

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

示意图:

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

2.1 简单排序算法

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

2.1.1 性能分析

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

2.2 堆排序

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
堆的实质是完全二叉树。
小根堆就是每一个根节点都比左右孩子来的小;大根堆就是每一个根节点都比左右孩子来的大。即一个根是最大值,一个根是最小值,就可以用来排序。
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

2.2.1 堆的调整

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
大根堆就找大的数值。

可以看出:
对一个无序序列反复“筛选”就可以得到一个堆;
即:从一个无序序列建堆的过程就是一个反复“筛选”的过程。

显然:
单结点的二叉树是堆;在完全二叉树中所有以叶子结点(序号 ⅰ > / 2 ⅰ>/2 >/2)为根的子树是堆。

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
由于堆实质上是一个线形表,那么我们可以顺序存储一个堆。归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

2.2.2 筛选过程算法

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

2.2.3 堆的建立算法

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

2.2.4 性能分析

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

3 归并排序

基本思想:将两个或两个以上的有序子序列归并为一个有序序列。
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
两个两个来。(或两个以上)
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
总共需要 l o g 2 n log_2n log2n趟。
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
线性表,双指针,即可比较合并。

现在两个子序列是相邻的。也是两个指针。
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

3.1 性能分析

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

4 基数排序

不需要比较,思想就是分配和收集。也叫桶排序或箱序:设置若干个箱子,将关键字为k的记录放入第k个箱子,然后在按序号将非空的连接。

基数排序: 数字是有范围的,均由0-9这十个数字组成,则只需设置十个箱子,相继按个、十、百.…进行排序。

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
以上就个位就有序了。之后按十位分:归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
十位有序,按照百位分:
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
发现排序完成。

4.1 性能分析

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构

5 各种排序算法的比较

归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构
归并交换基数简单选择排序,DSA,排序算法,算法,数据结构文章来源地址https://www.toymoban.com/news/detail-612381.html

到了这里,关于归并交换基数简单选择排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包