排序篇(六)----排序小结(不用三连,混流量券)

2023-11-28 08:20

本文主要是介绍排序篇(六)----排序小结(不用三连,混流量券),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

排序篇(六)----排序小结

排序算法复杂度及稳定性分析

直接插入排序的算法复杂度:

  • 最好情况下,当数组已经有序时,直接插入排序的时间复杂度为O(n),其中n是数组的大小。
  • 最坏情况下,当数组逆序排列时,直接插入排序的时间复杂度为O(n^2)。
  • 平均情况下,直接插入排序的时间复杂度也为O(n^2)。

直接插入排序是一种稳定的排序算法,它的稳定性表现在相同元素的相对顺序不会改变。

希尔排序的算法复杂度:

  • 希尔排序的时间复杂度取决于增量序列的选择,最坏情况下的时间复杂度为O(n^2),平均情况下的时间复杂度为O(nlogn)。
  • 希尔排序的空间复杂度为O(1)。

希尔排序是一种不稳定的排序算法,它的不稳定性表现在相同元素的相对顺序可能会改变。

直接选择排序的算法复杂度:

  • 无论数组的初始顺序如何,直接选择排序的时间复杂度都为O(n^2)。
  • 直接选择排序的空间复杂度为O(1)。

直接选择排序是一种不稳定的排序算法,它的不稳定性表现在相同元素的相对顺序可能会改变。

堆排序的算法复杂度:

  • 堆排序的时间复杂度始终为O(nlogn),其中n是数组的大小。
  • 堆排序的空间复杂度为O(1)。

堆排序是一种不稳定的排序算法,它的不稳定性表现在相同元素的相对顺序可能会改变。

冒泡排序的算法复杂度:

  • 冒泡排序的最好情况下,当数组已经有序时,时间复杂度为O(n)。
  • 冒泡排序的最坏情况下,当数组逆序排列时,时间复杂度为O(n^2)。
  • 冒泡排序的平均情况下,时间复杂度也为O(n^2)。

冒泡排序是一种稳定的排序算法,它的稳定性表现在相同元素的相对顺序不会改变。

快速排序的算法复杂度:

  • 快速排序的最好情况下,当每次划分都能均匀地将数组分为两部分时,时间复杂度为O(nlogn)。
  • 快速排序的最坏情况下,当每次划分都选择了最大或最小的元素作为基准时,时间复杂度为O(n^2)。
  • 快速排序的平均情况下,时间复杂度为O(nlogn)。

快速排序是一种不稳定的排序算法,它的不稳定性表现在相同元素的相对顺序可能会改变。

归并排序的算法复杂度:

  • 归并排序的时间复杂度始终为O(nlogn),其中n是数组的大小。
  • 归并排序的空间复杂度为O(n)。

归并排序是一种稳定的排序算法,它的稳定性表现在相同元素的相对顺序不会改变。

计数排序的算法复杂度:

  • 计数排序的时间复杂度为O(n+k),其中n是数组的大小,k是计数数组的大小。
  • 计数排序的空间复杂度为O(n+k)。

计数排序是一种稳定的排序算法,它的稳定性表现在相同元素的相对顺序不会改变。计数排序适用于元素范围较小的情况。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

。计数排序适用于元素范围较小的情况。

[外链图片转存中…(img-N9rKGkPO-1700183881150)]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这篇关于排序篇(六)----排序小结(不用三连,混流量券)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/429377

相关文章

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

hdu 1285(拓扑排序)

题意: 给各个队间的胜负关系,让排名次,名词相同按从小到大排。 解析: 拓扑排序是应用于有向无回路图(Direct Acyclic Graph,简称DAG)上的一种排序方式,对一个有向无回路图进行拓扑排序后,所有的顶点形成一个序列,对所有边(u,v),满足u 在v 的前面。该序列说明了顶点表示的事件或状态发生的整体顺序。比较经典的是在工程活动上,某些工程完成后,另一些工程才能继续,此时

poj 2135 有流量限制的最小费用最大流

题意: 农场里有n块地,其中约翰的家在1号地,二n号地有个很大的仓库。 农场有M条道路(双向),道路i连接着ai号地和bi号地,长度为ci。 约翰希望按照从家里出发,经过若干块地后到达仓库,然后再返回家中的顺序带朋友参观。 如果要求往返不能经过同一条路两次,求参观路线总长度的最小值。 解析: 如果只考虑去或者回的情况,问题只不过是无向图中两点之间的最短路问题。 但是现在要去要回

poj 3422 有流量限制的最小费用流 反用求最大 + 拆点

题意: 给一个n*n(50 * 50) 的数字迷宫,从左上点开始走,走到右下点。 每次只能往右移一格,或者往下移一格。 每个格子,第一次到达时可以获得格子对应的数字作为奖励,再次到达则没有奖励。 问走k次这个迷宫,最大能获得多少奖励。 解析: 拆点,拿样例来说明: 3 2 1 2 3 0 2 1 1 4 2 3*3的数字迷宫,走两次最大能获得多少奖励。 将每个点拆成两个

poj 2195 bfs+有流量限制的最小费用流

题意: 给一张n * m(100 * 100)的图,图中” . " 代表空地, “ M ” 代表人, “ H ” 代表家。 现在,要你安排每个人从他所在的地方移动到家里,每移动一格的消耗是1,求最小的消耗。 人可以移动到家的那一格但是不进去。 解析: 先用bfs搞出每个M与每个H的距离。 然后就是网络流的建图过程了,先抽象出源点s和汇点t。 令源点与每个人相连,容量为1,费用为

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

【软考】希尔排序算法分析

目录 1. c代码2. 运行截图3. 运行解析 1. c代码 #include <stdio.h>#include <stdlib.h> void shellSort(int data[], int n){// 划分的数组,例如8个数则为[4, 2, 1]int *delta;int k;// i控制delta的轮次int i;// 临时变量,换值int temp;in

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应