(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树。二叉堆可以分为两种形式:最大堆和最小堆。若将记录按从大到小排列,建“小”顶堆。若将记录按从小到大排,建“大”顶堆。说明:在堆排序算法中,我们使用的是最大堆,最小堆通常用于构造优先队列。算法分析:时间复杂度是O(nlogn)。堆排序属于原址排序:...
分类:
编程语言 时间:
2015-01-05 23:09:50
阅读次数:
390
算法导论第三版,第十一章散列表 习题11.1-4 大数组实现直接寻址方式的字典操作。...
分类:
编程语言 时间:
2015-01-05 16:36:47
阅读次数:
95
寻找数组A的和最大的非空连续子数组。例如:int A[] = {1, -2, 3, 10, -4, 7, 2, -5}的最大子数组为3, 10, -4, 7, 2,其最大和为18。方法1:枚举所有子数组并求出他们的和。长度为n的数组有O(n2)个子数组(即:n + n-1 + ... + 1=n(n...
分类:
编程语言 时间:
2015-01-05 10:59:23
阅读次数:
184
heap的定义:如果数组a[1,....n]满足:a[i]>a[2*i]&&a[i]>a[2*i+1],1<=i<=n/2,那么就是一个heap,而且是max-heapheap有两种,max-heap 和 min-heap,其中min-heap的性质与上面所述相反,即a[i]<a[2*i]&&a[i...
分类:
编程语言 时间:
2015-01-04 21:05:02
阅读次数:
279
快速排序是最流行的,也是速度最快的排序算法(C++ STL 的sort函数就是实现的快速排序); 快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数...
分类:
编程语言 时间:
2015-01-03 14:41:57
阅读次数:
180
算法导论习题,单数组实现双端队列,欢迎拍砖!...
分类:
编程语言 时间:
2015-01-02 23:45:19
阅读次数:
366
上机代码:
#include
#include
#include
using namespace std;
#define parent(i) (i)/2
#define left(i) 2*(i)
#define right(i) 2*(i)+1
int size;
void heapify(int a[], int i)
{
int l = left(i), r = right...
分类:
编程语言 时间:
2015-01-01 01:33:37
阅读次数:
174
本文阐述了如何使用期望和线性时间的选择算法求得第i顺序统计量,欢迎拍砖!...
分类:
编程语言 时间:
2014-12-30 17:13:00
阅读次数:
205
在《算法导论》的第7章快速排序(QuiclSort)采用分治思想(Divide and Conquer)。对一个典型的子数组A[p..r]进行快速排序的三步分治过程:分解(divide):数组A[p..r]被划分为两个(可能为空)子数组A[p..q-1]和A[q+1..r],使得A[p..q-1]中...
分类:
编程语言 时间:
2014-12-30 16:51:34
阅读次数:
198