
常用算法
文章平均质量分 80
Luncher
这个作者很懒,什么都没留下…
展开
-
排序算法之堆排序
堆排序引入了另外一种算法设计技巧:使用一种称之为堆的数据结构来进行信息管理。二叉堆是一个数组,它可以被看作一个近似的完全二叉树,树上的每个节点对应一个数组元素。标识堆的数组有两个属性:lenngth(数组元素个数),heap-size(表示有多少个堆元素存储在数组中)。也就是说数组length都可能存有数据,但是只有[0-heap-size]存储的是有效数据。这里,[0<=heap-size<=l原创 2013-08-30 00:53:25 · 924 阅读 · 0 评论 -
排序算法之堆排序(二)
上一篇介绍了堆排序的基本操作,这篇主要说说堆排序的主要应用。其实堆排序在几大排序算法里面并不算最优的一种,但是其存在就会有它的价值。下面我们来学习,用上一篇构造的最大堆设计一个最大优先级队列(priority queue)。原创 2013-09-01 23:11:41 · 733 阅读 · 0 评论 -
二分查找法
二分查找法又称为折半查找法,在很多数学书上可以看到它的存在。其查找速度快,平均性能好,缺点是要求待查找序列必须为有序。因此二分查找法主要用于序列有序,变动少的查找操作。根据编程珠玑上面的说法,很多程序猿都无法正确的写出二分查找法,因为其需要注意的地方还是蛮多的,很多公司也乐于拿它当作笔试题目,屡见不鲜。 二分查找法的主要过程为:因为序列有序,前后坐标为lower和upper。所以只需要比原创 2013-09-21 21:07:00 · 899 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡排序(Bubble Sort)应该是我们学习的第一个排序算法,因排序过程类似泡泡上浮或则下沉的形式所以叫冒泡排序。先看一个简单的实例整形数组排序:int sort_compare_int(void* pvParam1, void* pvParam2){ return ((int)pvParam1 > (int)pvParam2 ? 1 : -1);}int main(int原创 2013-08-28 20:38:55 · 820 阅读 · 0 评论 -
排序算法之希尔排序
希尔排序又称缩小增量排序,因DL.Shell于1959年提出而得名。 希尔排序的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。以n=10的一个数组 9, 3, 5, 7, 6, 1, 2, 4, 8, 10为例原创 2013-09-10 23:18:20 · 1199 阅读 · 0 评论 -
排序算法之快速排序
快速排序最坏时间复杂度是n^2 。对于包含n个元素的输入序列而言,快速排序虽然最坏情况下时间复杂度很差,但是它的平均性能非常好为nlgn。快速排序通常是最好的选择。另外它还能进行原址排序。快速排序算法描述:首先把输入序列分成两个部分A[p...q-1]和A[q+1...r]。使得A[p...q-1]部分都小于A[q]右半部分都大于A[q]。通过递归调用快速排序,不断对之序列排序完成整个排序过程。原创 2013-09-02 21:02:57 · 832 阅读 · 0 评论 -
排序算法之归并排序
有很多算法都是建立在递归操作的基础上,为了达到一个特定的目的把问题分解为若干个小问题并调用自身以解决相关的问题。这些算法都隐含的包含一个分治的思想:把大问题逐渐细化,递归求解这些问题,然后合并所得的解。分治在每次递归都有三个步骤:1>把原来的问题分解为若干个子问题。2>解决这些子问题,递归求解这些子问题,直到子问题足够小则直接求解。3>合并子问题所得的解。 归并排序是分治思想原创 2013-09-03 22:08:49 · 788 阅读 · 0 评论 -
排序算法之插入排序
.对于少量数据的排序,插入排序是个不错的选择,因为他不需要过多额外的空间,也容易理解。使用的情况还是很多的。简单的说就是把未排序的数依次插入已排序的系列即可。下面看一个示例:void InsertSort(int* pnArray, size_t nSize){ int nIndex = 0; if(nSize <= 1 || pnArray == NULL) { return原创 2013-08-28 00:25:25 · 983 阅读 · 0 评论