数据结构-第九章 内部排序-知识点总结2

选择类排序:

1.简单选择排序:

直接从数组中选择最小的记录和第一个记录交换位置,循环.

示例代码如下:

void SelectSort(int r[], int b){int i, j, k;int x;for(i = 1; i < n; i++){k = i;for(j = i+1; j <= n; j++){if(r[j] < r[k])//选择最小的记录,得到在数组中的位置 k = j;}if(k != i){x = r[i];r[i] = r[k];r[k] = x;}//交换位置 }
} 

时间复杂度:O(n^2).

2.树形选择排序(锦标赛排序):

与简单选择排序不同点是,占用空间更多,保留了之前的比较结果
每一个记录看作叶子节点,两两比较,选出最小的为双亲,进一步递归向上,找出根,比较成功后,该记录对应的叶子节点置为无穷;
进一步两两比较重复上述过程,直到记录全部输出
时间复杂度:O(nlog2(n)). 


3.堆排序:

排序过程中把向量中储存的数据看作一颗完全二叉树来进行操作


重建堆:
    大堆,筛选最大的元素出去,然后最后的元素补根节点,调整堆使最大的元素在最上面 

算法如下:

void sift(Type r[], int k, int m){//r[k...m]是以r[k]为根的完全二叉树,调整r[k]使之满足堆的性质 int i, j, t, x;t = r[k];x = r[k].key; i = k;j = 2 * k;//j指向t的左孩子bool finished = false;while(j <= m && !finished){if(j + 1 <= m && r[j].key < r[j+1].key){j++;}//得到左右孩子中记录关键字较大的位置坐标 if(x >= r[j].key) //如果满足堆的性质,上面的比孩子大 finished = true;else{r[i] = r[j];i = j;j = 2 * i;}} r[i] = t;
} 建初堆:
void crt_heap(Type r[], int n)
{//对r[]建立堆, n为数组长度int i;for(i = n / 2; i >= 1; i--)//i指向最后一个非叶子节点 sift(r, i, n); } 堆排序算法:
void HeapSort(Type r[], int n)
{crt_heap(r, n);for(i = n;  i>= 2 ;--i){r[0] = r[1];r[1] = r[i];r[i] = r[0];//最后一个元素和第一个元素交换位置,把最大的换到最后面去,以此达到升序排列x sift(r, 1, i-1);}} 时间复杂度:O(nlog2(n)).
算法是不稳定的, 空间复杂度O(1) .

 


归并类排序:将两个或两个以上的有序表合并成一个表

两个有序子序列合并算法: 

void Merge(Type r1[], int low, int mid, int high, Type r2[])
{//r1[low...mid]和r1[mid+1,..high]分别按照关键字有序排列 ,合并存放在r2[]中int i, j, k;i = low;j = mid + 1;k = low;while(i <= mid && j <= high){if(r1[i].key <= r1[j].key)r2[k++] = r[i++];elser2[k++] = r[j++];}while(i <= mid){r2[k++] = r1[i++];}while(j <= high){r2[k++] = r1[j++];}} 路归并排序的递归算法:
void MSort(Type r1[], int low, int high, Type r3[])
{//r1[low...high]排序后放在r3[low...high] 中, r2为辅助空间Type *r2;int mid;r2 = (Type *)malloc(sizeof(Type) * (high - low + 1));if(low == high) r3[low] = r1[low];//这个是递归最终退出条件else{//r1前半段放到r2前半段中,同理对于后半段,再将r2合并排序 mid = (low + high) / 2;MSort(r1, low, mid, r2);MSort(r1, mid + 1, high, r2); Merge(r2, low, mid, high, r3);} free(r2);} 调用:
void MergeSort(Type r[], int n){MSort(r, 1, n, r);
} 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

给微软的依赖注入框架写一些扩展方法

给微软的依赖注入框架写一些扩展方法Intro现在在项目里大多都是直接使用微软的依赖注入框架&#xff0c;而微软的注入方式比较简单&#xff0c;不如 AutoFac 使用起来灵活&#xff0c;于是想给微软的依赖注入增加一些扩展&#xff0c;使得可以像AutoFac 一样比较灵活的注册服务…

邻接表1试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc,相关定义如下:icoding---算法改进--配详细注释

邻接表1 试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc&#xff0c;相关定义如下&#xff1a; typedef int VertexType; typedef enum{DG, UDG }GraphType; typedef struct ArcNode{int adjvex;InfoPtr *info;struct ArcNode *nextarc; }ArcNode; typede…

最长公共子序列-dp

一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08;也可以不删除任何字符&#xff09;后组成的新字符串。 例如&#xff0c;“ace” 是 “abcde” 的子序列&#xff0c;但 “aec” 不是 “abcde” …

初中信息技术python教案_初中信息技术优质课教案 python程序设计开发第二课 第5课变量 教案...

环节教学过程知识点导学过程学习过程课前准备1.分成4组&#xff0c;选出组长&#xff0c;奖励规则&#xff1b;2.打开Python程序&#xff1b;3.快捷键的使用&#xff1a;CtrlN新建CtrlS保存CtrlC复制CtrlV粘贴F5运行熟悉快捷键创设情境观看动画&#xff1a;《鸡兔同笼》&#x…

哈希表添加哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。typedef enum{ HASH_OK, -icoding

哈希表添加 哈希表&#xff08;Hash Table&#xff0c;也叫散列表&#xff09;&#xff0c;是根据键&#xff08;Key&#xff09;而直接访问在内存存储位置的数据结构。也就是说&#xff0c;它通过计算一个关于键值的函数&#xff0c;将所需查询的数据映射到表中一个位置来访问…

将 ASP.NET Core 2.1 升级到最新的长期支持版本ASP.NET Core 3.1

目录前言Microsoft.AspNetCore.Mvc.ViewFeatures.Internal 消失了升级到 ASP.NET Core 3.1项目文件&#xff08;.csproj&#xff09;Program.csStartup.csViewBag 与 Razor Pages 第一次接触ViewBag 与 Razor Pages 第二次接触小结&#xff08;文件更改对比图&#xff09;ASP.N…

[蓝桥杯2016初赛]密码脱落

题目描述 X星球的考古学家发现了一批古代留下来的密码。这些密码是由A、B、C、D 四种植物的种子串成的序列。 仔细分析发现&#xff0c;这些密码串当初应该是前后对称的&#xff08;也就是我们说的镜像串&#xff09;。 由于年代久远&#xff0c;其中许多种子脱落了&#xff0c…

python数据类型及使用方法_python 基本数据类型及方法

python的基本数据类型1.字符串str1.1作用不可变类型。主要是表示文本的数据类型&#xff0c;形容事物的属性。Python中最常用的类型之一。1.2方式主要有四种方式&#xff1a;文本内容。用单引号将内容包括。主要适用于单行。"文本内容"。用法同单引号。主要适用于单行…

AVL添加平衡二叉树,是一种二叉排序树,其中每个结点的左子树和右子树的高度差至多等于1。-icoding-数据结构-C-typedef struct node{ int val;

AVL添加 平衡二叉树&#xff0c;是一种二叉排序树&#xff0c;其中每个结点的左子树和右子树的高度差至多等于1。 它是一种高度平衡的二叉排序树。现二叉平衡树结点定义如下&#xff1a; typedef struct node {int val;struct node *left;struct node *right;struct node *par…

[蓝桥杯2015决赛]密文搜索

题目描述 福尔摩斯从X星收到一份资料&#xff0c;全部是小写字母组成。 他的助手提供了另一份资料&#xff1a;许多长度为8的密码列表。 福尔摩斯发现&#xff0c;这些密码是被打乱后隐藏在先前那份资料中的。 请你编写一个程序&#xff0c;从第一份资料中搜索可能隐藏密码的位…

WTM系列视频教程:View和Taghelper

文字摘要&#xff1a;“又到了老刘胡说的时间了&#xff0c;今天我们主要聊一下View和TagHelper。在前后端不分离的模式下&#xff0c;View还是很重的一块。”“前几课有朋友反馈说收获很大&#xff0c;也有朋友反应基础内容太多&#xff0c;众口难调啊。这个系列教程还是希望有…

sketch里的ios控件_30个让你眼前一亮的iOS Swift UI控件!

前言笔者接触 iOS 开发有一段时间了&#xff0c;尤其特别喜欢UI部分&#xff0c;特意收集整理了30个让你惊艳的第三方开源控件&#xff08;swift&#xff09;&#xff0c;无论是应用到项目中还是用来学习都能让你大呼过瘾&#xff0c;废话不多说&#xff0c;直接上图上链接&…

堆辅助函数二叉堆是完全二叉树或者是近似完全二叉树。二叉堆有两种:最大堆和最小堆。“最小堆”的定义如下:typedef struct _otherInfo-icoding-C

堆辅助函数 二叉堆是完全二叉树或者是近似完全二叉树。二叉堆有两种&#xff1a;最大堆和最小堆。 最大堆(大顶堆)&#xff1a;父结点的键值总是大于或等于任何一个子节点的键值&#xff0c;即最大的元素在顶端&#xff1b; 最小堆(小顶堆)&#xff1a;父结点的键值总是小于或…

【要闻】Kubernetes不适合发行版模式、Windows业务无法达到营收指引

评论&#xff1a;发行版模式适用于Linux但不适用于Kubernetes人们经常将Kubernetes比喻成一种革命&#xff0c;众多相关公司纷纷涌现以利用其发展趋势证明了这一点。在从前&#xff0c;希望在Linux领域中赚钱的公司拿走了核心&#xff0c;将其与最佳实践和喜爱的应用程序捆绑在…

[蓝桥杯2015决赛]积分之迷-枚举(水题)

题目描述 小明开了个网上商店&#xff0c;卖风铃。共有3个品牌&#xff1a;A&#xff0c;B&#xff0c;C。 为了促销&#xff0c;每件商品都会返固定的积分。 小明开业第一天收到了三笔订单&#xff1a; 第一笔&#xff1a;3个A 7个B 1个C&#xff0c;共返积分&#xff1a;31…

python车辆识别硬件_Opencv python之车辆识别项目

图片车辆识别根据文章搭建好环境后开始进行做项目linkimport sysimport cv2from PyQt5.QtGui import *from PyQt5.QtWidgets import *from PyQt5.QtGui import QIcon, QPalette, QPixmap, QBrush, QRegExpValidatorclass mainWin(QWidget):def __init__(self):""&quo…

[蓝桥杯2016决赛]反幻方-next_permutation枚举

题目描述 我国古籍很早就记载着 2 9 4 7 5 3 6 1 8 这是一个三阶幻方。每行每列以及对角线上的数字相加都相等。 下面考虑一个相反的问题。 可不可以用 1~9 的数字填入九宫格&#xff0c;使得&#xff1a;每行每列每个对角线上的数字和都互不相等呢&#xff1f; 这应该能做到。…

堆初始化-二叉堆一般用数组来表示。例如,根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2-icoding-void init_min_heap(PMinHeap pq, int

堆初始化 二叉堆一般用数组来表示。例如&#xff0c;根节点在数组中的位置是0&#xff0c;第n个位置的子节点分别在2n1和 2n2。 因此&#xff0c;第0个位置的子节点在1和2&#xff0c;1的子节点在3和4。以此类推。这种存储方式便于寻找父节点和子节点。 在二叉堆上可以进行插入…

管理学定律--墨菲定律

如果有两种或两种以上的方式去做某件事情&#xff0c;而其中一种选择方式将导致灾难&#xff0c;则必定有人会做出这种选择。根本内容是&#xff1a;如果事情有变坏的可能&#xff0c;不管这种可能性有多小&#xff0c;它总会发生。一、墨菲定律来源1949年&#xff0c;一位名叫…

毕滢python小咖养成计划百度云_学技树-Python小咖养成计划

1.计算机操作基础.mp42.Python下载与配置.mp43.变量的概念.mp44.函数的调用和定义.mp45.数据的类型.mp46.字符串.mp47.if条件判断.mp48.while循环.mp49.for循环.mp410.列表.mp411.字典.mp412.类的概念.mp413.类的使用.mp4代码管理及答疑系统.pdf①项目一&#xff1a;数据分析(已…