随笔分类 - 排序算法
基础算法
摘要:基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。 算法描述 1.取得数组中的最大数,并取得位数; 2.arr为原始数组,从最低位开
阅读全文
摘要:P1177 【模板】快速排序 #include<bits/stdc++.h> using namespace std; typedef struct AVLTreeNode{ int key; int height; AVLTreeNode* left; AVLTreeNode* right; AV
阅读全文
摘要:计数排序(Counting Sort)计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。1 算法描述找出待排序的数组中最大和最小的元素;统计数组中每个值为i的元素出现的次数,存入数
阅读全文
摘要:桶排序(Bucket Sort)桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)
阅读全文
摘要:选择排序(Selection Sort)选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。2.1
阅读全文
摘要:堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图
阅读全文
摘要:Shell排序希尔排序是一种插入排序算法,它出自D.L.Shell,因此而得名。Shell排序又称作缩小增量排序。Shell排序的执行时间依赖于增量序列。 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后
阅读全文
摘要:插入排序有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法--插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n
阅读全文
摘要:冒泡排序排序的基本概念排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。
阅读全文
摘要:P7072 [CSP-J2020] 直播获奖 #include<cstdio> #include<algorithm> #include<vector> #include<cmath> #include<functional> using namespace std; vector <int> a;
阅读全文
摘要:P7072 [CSP-J2020] 直播获奖基本思想:求前几名是多少分。 #include<algorithm> #include<iostream> using namespace std; const int maxn=100010; int a[maxn]; int t[610]; int m
阅读全文
摘要:c++ STL中sort函数是一个快速排序函数可以对任何类型的数据进行排序。STL,C++中的标准模板库, 使用起来方便并且效率较高;#include<algorithm>//用sort要包含这个头文件 一:对基本类型数组从小到大排序sort( 数组名+n1,数组名+n2);将数组中下标从n1到n2
阅读全文
摘要:P1059 [NOIP2006 普及组] 明明的随机数 题解排序+去重,由于值域范围在[1,1000],且个数100个内,故可以使用桶排序的思想一次完成上述两个任务。 #include<bits/stdc++.h> using namespace std; int T[1001]; int main
阅读全文
摘要:P1177 【模板】快速排序 #include<bits/stdc++.h>using namespace std;int main(){ priority_queue<int,vector<int>,greater<int> > q; int n; cin>>n; for (int i=1;i<=
阅读全文
摘要:P1177 【模板】快速排序由于map可以按关键值排序,且每个关键值可以有对应值表示该关键值的个数,所以可以完成这道题 #include<bits/stdc++.h>using namespace std;int main(){ map<int,int> s; int n; cin>>n; for
阅读全文
摘要:P1177 【模板】快速排序 由于multiset能自动对关键值进行排序,所以multiset可以进行排序功能且支持相同关键值 #include<bits/stdc++.h>using namespace std;int main(){ multiset<int> s; int n; cin>>n;
阅读全文