排序算法
LHJ884
这个作者很懒,什么都没留下…
展开
-
大小堆排序 & Top K 问题
大小堆排序堆这种数据结构定义比较简单,大根堆就是父节点的值大于左右子孩子节点的值(小根堆相反),而且利用数组下标就可以很好的表现堆(不过要注意是从0 还是 1开始)。堆常用语实现优先队列,Top K等问题。算法导论第6章对堆的进行了详细讲解,我就不赘述了(看书是不够的,要把思路用代码实现出来才是真的懂了,争取把算法导论上常用的数据结构和算法都自己实现一般)。大根堆具体代码(按照算法导论中下标从1开始原创 2015-07-29 15:09:44 · 4956 阅读 · 1 评论 -
快速排序的两种实现
简介快速排序是排序中速度比较快的,采用分治策略,不断递归排序。很多编程语言的sort()或者qsort()函数的底层实现就是快排。 算法导论第7章对快速排序进行了深入的探讨,而且它的划分思想与国内的许多教材不同。如严蔚敏数据结构版本选择第一个元素为中枢,从左右两端往中间逼近;而算法导论则是选择最后一个元素为中枢,两个指针一起从左到右遍历一遍进行划分。(选择中枢也是个值得探讨的问题,算法导论采取随机原创 2015-07-29 14:51:47 · 583 阅读 · 0 评论 -
冒泡-选择-插入排序算法的实现
排序算法排序是编程中很重要的一种算法,虽然各编程语言都实现了效率很高的sort函数在工作中调用,但是经典排序算法里面的许多思想值得借鉴以及深入学习。 以下是自己对几个经典排序的实现。用到的交换两数的宏定义,以及数组初始化,输出函数:#define SWAP(a,b) do { temp = (a);\ (a) = (b);\ (b) = (temp);}while(0);//随机原创 2015-07-28 20:51:05 · 529 阅读 · 0 评论 -
归并排序的实现
归并排序算法导论第二章就着重介绍的归并排序,充分体现了分治法的思想,同时也利用了递归。也是类比生活中洗牌的场景,十分生动形象。具体代码:void merge(int a[],int p ,int q,int r){ int i=0,j=0,k; //左右新数组 int *LeftArray; int *RightArray; //左右数组大小 in原创 2015-07-29 14:53:25 · 512 阅读 · 0 评论