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

第九章 内部排序 

排序:重点在于对于记录的关键字进行排序,得到按关键字有序记录序列
分为:
    A.内部排序: 排序过程在内存中进行 
    B.外部排序: 待排序记录数据量过大,需要借助外部存储设备
排序的稳定性:排序后有相同关键字的记录顺序不变就是稳定的排序


插入类排序:
1.直接插入排序:将新加入的记录的关键字与之前的记录关键字从后往前比较,
               若较小,则向前比较,同时进行比较的记录后移一个位置,直到找到小于等于的关键字,插入在其后. 

实例代码如下: 

void InsSort(int r[], int length){//r可以设置为结构数组,这里认为是数组 int i,j;for(i = 2; i < length; i++){ // i=2开始,i=1为第一个元素,认为是子表,i=0设置为监视哨 r[0] = r[i];//将待插入记录存到监视哨中,临时保存 j = i - 1;  //i为初始待插入记录位置,i-1为需要比较的记录位置while(r[0] < r[j]){r[j+1] = r[j];j--;} r[j+1] = r[0];}
} 

优点:算法简单,适用于记录数目较少且基本有序
时间复杂度:O(n^2).

2.折半插入排序:类似于快排

示例代码如下:

void BinSort(int r[], int length){int i, x, j;int low, high, mid;for(i = 2;i <= length; i++){x = r[i];low = 1;high = i - 1;while(low < high){//Attention!不取等,书上是错的 mid = (low + high) / 2;if(x < r[mid])high = mid - 1;elselow = mid + 1;}for(j = i - 1; j >= low; j--)r[j+1] = r[j];r[low] = x; }
} 

时间复杂度:O(n^2).
需要比较的次数最大为其折半判定树的深度log2(n)

3.希尔排序:排序结果,基本有序;又称缩小增量排序;将关键字序列分为若干个子序列,对子序列插入排序

void f1(int r[], int length, int d){//d为这一轮子序列长度(增量) int i, j;for(i = 1+d; i <= length; i++){if(r[i] < r[i-d]){r[0] = r[i];for(j = i - d; j > 0 && r[j] > r[0]; j -= d){r[j + d] = r[j];}//如果子序列后者的记录关键字比前小,就复制前者到后者 r[j + d] = r[0];//复制要交换的一个到适合的位置 }}
} void f2(int r[], int length, int d[], int n){for(i = 0; i < n; i++)//d[]为增量数组,n为该数组长度 d[n-1] == 1; f1(r, length, d[i]);
}

时间复杂度:O(n^1.5).
算法不是稳定的 .


交换类排序:

1.冒泡排序(相邻比序法):反复扫描记录序列,依次交换逆序记录的位置


void BubbleSort(int r[], int n){bool change = true;int i,j;int x = 0;for(i = 1; i < n && change; i++){change = false;for(j = 1; j <= n - i; j++){if(r[j]>r[j+1]){x = r[j];r[j] = r[j+1];r[j+1] = x;change = true;}}}
} //下面这种简单些:上升法,不带标记 
void BubbleSort(int r[], int n){int i, j, k;for(i = 0; i < n; i++){for(j = n - 2; j >= i; j--){if(r[j] > r[j+1]){k = r[j];r[j] = r[j+1];r[j+1] = k;}}} 
}时间的复杂度:O(n^2). 


2.快排:原理:一次性可以消除多个逆序来减少耗费时间
找到一个划分元,关键字小的移到前面,大的移到后面,递归在子序列中找出划分元.直到子表长度小于等于1


void QKSort(int r[], int low. int high){if(low < high){pos = QKPass(r, low, high);//再次快排QKSort(r, low, pos -1);QKSort(r, pos +1, high); }
} 一趟快速排序算法: 
int QKPass(int r[], int low, int high){int x;while(low < high){while(low < high && r[high] > x)high--;if(low < high){r[low] = r[high];low++;}	while(low < high && r[low] < x)low++;if(low < high){r[high] = r[low];high--;}		}r[low] = x;return low;
}
时间复杂度:O(nlog2(n)) 


 

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

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

相关文章

python文本替换 数据库_在Python中使用ASCII文件中的注释查找/替换子...

在我正在研究的生物信息学项目中,我遇到了一些编码问题.基本上,我的任务是从数据库中提取基序序列并使用该信息来注释序列比对文件.对齐文件是纯文本,因此注释不会是任何复杂的,最好只是用对齐文件本身中的星号替换提取的序列.我有一个脚本扫描数据库文件,提取我需要的所有序列…

gRPC in ASP.NET Core 3.x - gRPC 消息定义

之前写了几篇关于 Protoco Buffer 的文章。gRPC in ASP.NET Core 3.x - gRPC 简介&#xff08;1&#xff09;gRPC in ASP.NET Core 3.x - gRPC 简介&#xff08;2&#xff09;当gRPC使用Protocol Buffer作为传输协议的时候&#xff0c;Protocol Buffer里所有的规则仍然都适用。…

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

哈希表创建 typedef enum{HASH_OK,HASH_ERROR,HASH_ADDED,HASH_REPLACED_VALUE,HASH_ALREADY_ADDED,HASH_DELETED,HASH_NOT_FOUND, } HASH_RESULT; typedef struct __HashEntry HashEntry; struct __HashEntry{union{char *str_value;double dbl_value;int int_value;}…

10个用于C#.NET开发的基本调试工具

在调试软件时&#xff0c;工具非常重要。获取正确的工具&#xff0c;然后再调试时提取正确的信息。根据获取的正确的错误信息&#xff0c;可以找到问题的根源所在。找到问题根源所在&#xff0c;你就能够解决该错误了。你将看到我认为最基本的解决在C# .NET 中错误问题的工具的…

python面向对象语言_Python语言基础之——面向对象编程

1.类属性1)类属性&#xff1a;直接定义在类中的变量是类属性类属性的值不会因为对象不同而不一样2)对象属性通过 self.属性名 值 定义在init函数中的属性对象属性的值会因为对象不同而不一样2.对象属性的增删改查1.查对象.属性 - 获取对象中指定属性对应的值,属性不存在会报错…

[蓝桥杯2015初赛]移动距离

题目描述 X星球居民小区的楼房全是一样的&#xff0c;并且按矩阵样式排列。 其楼房的编号为1,2,3… 当排满一行时&#xff0c;从下一行相邻的楼往反方向排号。 比如&#xff1a;当小区排号宽度为6时&#xff0c;开始情形如下&#xff1a; 1 2 3 4 5 6 12 11 10 9 8 7 13 14 15 …

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

选择类排序: 1.简单选择排序: 直接从数组中选择最小的记录和第一个记录交换位置,循环. 示例代码如下: void SelectSort(int r[], int b){int i, j, k;int x;for(i 1; i < n; i){k i;for(j i1; j < n; j){if(r[j] < r[k])//选择最小的记录,得到在数组中的位置 k…

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

给微软的依赖注入框架写一些扩展方法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;直接上图上链接&…