![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序算法
GMFTBY
for all
展开
-
快速排序算法
快速排序是经典的二分思想的应用#include"iostream"#include"cstdio"using namespace std;int a[101];int n;void quicksort(int left,int right){int i,j,t,temp;if(left>right){return ;}el原创 2016-03-02 00:01:02 · 370 阅读 · 0 评论 -
Shell-Sort 增量排序算法 总结
1.Shell - Sort希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。我们都知道直接插入排序算法是相对来说比较低效的算法,但是正是插入排序算法的特性决定了我们在数据量小的时候,数据基本有序的时候的排序效果往往比一些高级排序算法构架行之有效,更加快速在我们开始了解Shell-Sor原创 2016-11-27 23:49:19 · 3056 阅读 · 0 评论 -
胜者树 败者树 K-路最佳归并树 高效外部排序
外部排序 外部排序和内部排序还是有非常的的不同的,我们的外部排序主要针对的优化目标也是不同的,这里我先从外部排序的物理基础开始进行讲解1.外存:外部存储设备,相对于我们的内部存储设备而言具有一些特点1.优点:永久存储能力,便携性,存储空间大2.缺点:访问速度相对于内存的访问速度来说极其低下(相差约5~6个数量级)因此对于外存来说,我们要遵守的基本操作原则就是:尽原创 2016-12-02 16:33:21 · 9284 阅读 · 1 评论 -
关于快速排序算法本质的重要说明 - 考试考了不会就不要怪我
说明,本文章的针对已经大致的理解了快速排序的同学双向扫描 VS 单向扫描我们都知道,快速排序算法存在两种实现机制,一种是单向扫描法,一种是优化后的双向扫描法单向扫描:首先,我们需要知道,单向扫描是最正规的《算法导论》上给出的基本实现的过程伪代码如下data - array wait to sortn - the count of the arrayi - head po原创 2016-11-28 21:47:26 · 1546 阅读 · 1 评论 -
最小生成树算法汇总
较为完全的初学者学习最小生成树的利器,想要玩转ACM的小编倾情奉献原创 2016-07-28 15:38:29 · 4660 阅读 · 1 评论 -
Radix-Sorting(线性阶 多关键字排序算法 基数排序)
1.引入:我们发现也经过证实,交换式的排序的算法的时间复杂度的下界是O(n*lgn),但是这真的就是我们的排序算法的极限了吗,事实并不是这样的,我们的多关键字的分配式排序--本文的基数排序就是如此却是打破了这样的瓶颈分配式的Radix-Sorting算法成功的将我们的算法的复杂度优化到无限接近线性阶的完美的O(n),下面,我们就来一一道来2.前身:桶式排序:我们先假定排序这样的原创 2016-09-30 13:55:10 · 1375 阅读 · 0 评论 -
微软面试百题005——堆实现求前k大/小的数
1.题目描述:请求出一组序列中的数中的前k小的数,或者前k大的数,问题很简单2.算法思路:该题利用顺序存储二叉堆可以很好的解决:首先我们先解释一下“堆”这个数据结构堆这个东西我们可以理解成是利用了二叉树的一条性质而人工构建的一组顺序存储二叉树分类:最小堆:每个父亲节点都比子节点小最大堆:每个父亲节点都比子节点大顺序存储实现的原理:二叉树存在一条性质,原创 2016-08-09 18:28:23 · 787 阅读 · 0 评论 -
归并排序全解(含复杂度证明)
史上最全的归并排序讲解1.归并排序实现2.归并排序复杂度证明3.归并排序应用4.归并排序的优化原创 2016-08-08 12:32:13 · 8011 阅读 · 0 评论 -
手摇算法(三重反转算法/内存反转算法)
手摇算法最完整的讲解附带讲解手摇算法对归并排序的优化,你值得一看原创 2016-08-08 21:48:35 · 2701 阅读 · 0 评论 -
快速排序全面讲解(含复杂度证明)——即将引出八大排序算法
快速排序最经典额讲解,一看就会,不会以抽我耳刮子都可以原创 2016-08-07 23:07:58 · 9738 阅读 · 8 评论 -
快速排序以及堆排序在查找数方面的主要应用 即将引出线性查找BFPRT算法
应用解释:要求找出一组数中的第n大的数字1.快速排序改进-1(快速选择算法)快速选择算法在于排除,因为一次快排之后便可以确定要找的数在那个子区间,然后不断递归知道找到解,如果没有解最终会导致left>right,从而返回-1,代表输入的要找的数比容量要大当然为了简化的话,是一定要进行剪枝,即当输入的数比容量大的时候直接返回error#include"iostream"#include"cstdi原创 2016-05-10 17:18:20 · 971 阅读 · 0 评论 -
归并排序经典应用求逆序数
在开始思考之前,应该明确:1.归并排序在返回合并的过程中,两个分块是各自有序的2.整个过程是递归的我们的求逆序对的时候将数组不断地二分二分,但是无论二分的过程有多少,二分的每个小块怎么排序,逆序对数是不会改变的在merge函数中我们将两部分的数组进行有序合并的过程中前一个a[begin+i]后一个a[centre+1+j]当a[begin+i]>a[centre原创 2016-02-29 23:03:19 · 528 阅读 · 0 评论 -
归并排序算法及分析
#include"iostream"#include"cstdio"#define inf 9999999 //注意inf代表监视哨,在从小到大排序时,监视哨是做当前条件下的无限大值,否则,监视哨用作当前环境下的绝对最小值using namespace std; //小心当数组不是全局变量的时候,完全可以用指针实现相应的功能int a[]={0,449,原创 2016-02-29 14:52:40 · 585 阅读 · 0 评论 -
插入排序算法分析
#include"iostream"#include"cstdio"//本算法加入了a[0]作为监视哨,存储了下一个带排序插入的数据//并且本算法在下一个数据插入之前的前面序列始终是有序的using namespace std;int a[]={0,31,41,59,26,41,58};int num=6;int main(){int k原创 2016-02-29 13:22:16 · 469 阅读 · 0 评论 -
堆排序 两种实现(最小堆和最大堆)
堆排序算法是建立在二叉树的堆结构上的,通过交换堆(一维数组)中的元素,并进行上浮或下沉函数运算实现多次调整堆排序算法的复杂度低,和快速排序属于相同速度级别的一种快速的排序算法下面以最小堆和最大堆来进行堆排序算法的实现,具体内容在代码中进行讲解1.最小堆 堆排序#include"iostream"#include"cstdio"using namespace原创 2016-03-12 23:31:35 · 3051 阅读 · 0 评论