一、排序算法的分类 1. 比较排序 VS 非比较排序 是否需要比较两个元素的大小才能进行排序 2. 交换排序 VS 插入排序 VS 选择排序 交换:每次只调换两个元素之间的位置 插入:遍历到的元素放入之前维护的已完成排序的序列中 选择:选择剩余元素中最大或最小的元素 3. 排序算法的稳定度 如果排序 ...
分类:
编程语言 时间:
2019-10-07 13:28:09
阅读次数:
81
第一种方法: 计数排序后,然后找出两两之间的最大差值 计数排序的时间复杂度是O(N) 第二种方法: 1 使用桶的思想,设置N+1个桶,必然有一个空桶,那么就排除了最大差值在一个桶内,因为空桶两侧的差距肯定大于桶内的差距 2 但是最大差值不一定就是空桶左侧max和空桶右侧min,需要依次遍历求差值 ...
分类:
编程语言 时间:
2019-10-05 18:50:36
阅读次数:
135
这三种排序算法不是基于比较的排序。时间复杂度O(N),额外空间复杂度O(N),稳定的 基于桶,一种数据出现的频率,一个萝卜一个坑,先扔入桶中,在按照桶的大小倒出元素。 非基于比较的排序 n个数,准备n+1个桶。 最小值a和最大值b,最小值放在a号桶中,最大值放在b桶中。每个桶的范围(b-a)/(n+ ...
分类:
编程语言 时间:
2019-10-03 22:00:21
阅读次数:
104
稳定性: 稳定:冒泡排序,插入排序,归并排序、桶排序、计数排序、基数排序 非稳定:选择排序、快速排序、堆排 稳定性的优势 稳定性可保证双属性条件下,按第一个属性排序后,再按照第二个属性排序,排完后属性2相等的元素,按属性1的顺序排列。 工程中 长序列: 基础类型:快排(非稳定) 自定义属性:堆排(稳 ...
分类:
编程语言 时间:
2019-10-03 21:42:17
阅读次数:
94
Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。 1、插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法 ...
分类:
编程语言 时间:
2019-09-19 21:09:41
阅读次数:
81
还有一个月就要开始我的初赛了! 如果没搞好就前功尽弃了呢。 所以今天开始努力复习初赛知识! 计数排序(桶排)就是对于一个序列,找小于某一个数的数的数量,就能直接得到这个数排序后所在位置,是一种牺牲空间换时间的做法,十分稳定。 选择排序就是每次遍历数组找到最小的元素,放在头部,再从剩下的里面找次小的, ...
分类:
编程语言 时间:
2019-09-16 21:12:18
阅读次数:
109
基础(据说):基数排序:https://blog.csdn.net/zhen921/article/details/80354096 模板题:https://www.luogu.org/problem/P3809 学习粗:https://www.cnblogs.com/chenxiaoran666/ ...
分类:
编程语言 时间:
2019-09-14 01:06:28
阅读次数:
102
后缀数组是一个思路较为清晰,代码十分玄学的操作,~~建议大家按照代码模拟一下样例,理解每一步操作的意义~~ 后缀数组的作用是将长度为N的字符串的N个后缀来进行排序 我们直接排序的复杂度是$O(N^2logN)$ 后缀数组常用方法是倍增+基数排序算法: 1.基数排序 我们先来看一下代码:(默认升序排列 ...
分类:
编程语言 时间:
2019-09-01 12:56:49
阅读次数:
141
基数排序 按照各个数字位数进行排序,分为LSD(最低位优先)和MSD(最高位优先)两种。复杂度为$O(d(n+k))$,其中$d$为最大位数,$n$为排序数量,$k$为基数的种数。 cpp include include include using namespace std; int getdg( ...
分类:
编程语言 时间:
2019-08-28 13:23:29
阅读次数:
81
第一篇 基本概念 01 什么是数据结构.md 02 什么是算法.md 03 应用实例 最大子列和问题.md 第二篇 线性结构 01 线性表及其实现.md 02 堆栈.md 03 队列.md 04 应用实例 多项式加法运算.md 05 小白专场 多项式乘法与加法运算 c语言实现.md 05 小白专场 ...
分类:
编程语言 时间:
2019-08-25 12:00:45
阅读次数:
92