上一页 1 ··· 3 4 5 6 7 8 下一页
摘要: 堆排序,就是利用二叉堆的特性来完成排序的工作。这里假定我们要完成对一个数组进行从小到大排序的工作,那么利用最小堆(见《二叉堆 - 最小堆》)的特性,对于一个已经建好的最小堆,我们每次以DeleteMin函数取出最小的元素,放入一个临时数组中,如此一来,就完成了对该数组的排序。时间复杂度的话,建立堆的... 阅读全文
posted @ 2014-10-29 16:17 nipan 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 与上篇《二叉堆 - 最小堆》类似,只不过堆序(heap order)从内部节点小于左右子节点变成了内部节点大于左右子节点。代码如下: 1 #include 2 #include 3 4 #define MIN (1items =(Item*)malloc((maxItems+1)*si... 阅读全文
posted @ 2014-10-29 15:31 nipan 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 二叉堆:一般我们拿来用的就是最大堆和最小堆。最小堆:每个节点的值比它的左右子节点的值要大。代码实现如下:参考Mark Allen Weiss《数据结构和算法分析》(第二版) 1 #include 2 #include 3 4 #define MIN (1items =(Item*)ma... 阅读全文
posted @ 2014-10-28 22:49 nipan 阅读(921) 评论(0) 推荐(0) 编辑
摘要: 我体会的希尔排序,是插入排序的的一种改进,对待排序的数组以一定的间隔划分成子数组,将这些子数组进行插入排序。随后间隔减小,划分新的子数组,插入排序。直至间隔为1,对完整的数组进行插入排序。贴出希尔排序的实现和插入排序的实现,可以进行对比。 1 // Shell sort, can be treate... 阅读全文
posted @ 2014-10-28 10:12 nipan 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 先说一下,这个归并排序(版本一)是我自己的一些想法。简单地浏览了一下书本(《算法:C语言实现》(第三版)),实现方法并不一致。但是这个算法我测试了一下,还行。归并排序:分治法的思路。把一个待排序的数组(arr)分成两半(arrA和arrB)进行归并排序。在归并排序的过程中,arrA再分成两半……这个... 阅读全文
posted @ 2014-10-26 21:43 nipan 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 简单实现了一下插入排序的算法,针对数组进行排序。插入排序:针对一个需要排序的数组,我们把它的第一个元素当成已经排好的序列。然后我们从第二个元素开始,一个元素接着一个元素地(见第一个循环,i从1到len-1)往这个已经排好的序列当中插入“新”的元素,每次插入的时候要保证这个新的元素在这个序列中是有序的... 阅读全文
posted @ 2014-10-26 21:32 nipan 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 简单地用递归的方法实现了二分查找算法,适用于数组。二分查找算法的前提条件是数组本身是有序的,比如int arr[6] = {2, 3, 5, 7, 11, 13};在数据是稳定有序、几乎不存在插入和删除操作的情况下,二分查找是实用的。代码如下: 1 // 递归 2 int 3 BinarySear... 阅读全文
posted @ 2014-10-26 21:17 nipan 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 1. 检查一个整数x是否是2的倍数:x & (x-1)提示:如果x是2的倍数,那么x的二进制数中只有一位是1。2. 最大的有符号整数(32位)~(1 b,如果为1,则a>(sizeof(int)*8-1)假设上式的值为s,另外假设右移操作为逻辑右移。则s的值为0或者1。所以我们可以得到a和b中较大的... 阅读全文
posted @ 2014-10-25 22:34 nipan 阅读(1754) 评论(0) 推荐(0) 编辑
摘要: 读了Robert Sedgewick的《算法:C语言实现》(第三版)的第五章,了解了许多关于树,特别是二叉树的知识。这里总结一下。直接看代码(C++)吧。 1 #include 2 #include 3 #include 4 #include 5 6 #define null ... 阅读全文
posted @ 2014-10-25 22:30 nipan 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 问题:现在有两个字符串,我们要寻找它们最长的公共子串。比如regression和express这两个字符串,它们的子串有e和ress,那么它们的最长公共字串就是ress。解法:我们利用一个二维数组来记录两个字符串相互匹配的情况,如果字符串str1长度为len1,字符串str2长度为len2,那么数组... 阅读全文
posted @ 2014-10-24 20:05 nipan 阅读(509) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 下一页