《算法导论》的实现
电子科学
有一颗不当码农的心
展开
-
《算法导论》的堆排序
#include#includevoid BUILD_MAX_HEAP(int A[],int length){ int heapsize; int i; heapsize = length; for(i = (int)(heapsize/2);i>=0;i--) MAX_HEAPIFY(A,i,heapsize);}void MAX_HEAPIFY(int A[],in原创 2015-07-28 21:12:34 · 428 阅读 · 0 评论 -
《算法导论》中求最大子数组的C++实现
#include#includeusing namespace std;#define Minium -10000typedef struct Node{ //return type int low; int high; int sum;}Node;//分治方法求最大子数组//p为起点 r为终点,mid为中点Node Find_Max_Subarry(vector原创 2015-08-24 12:54:01 · 1000 阅读 · 1 评论 -
<算法导论》第四章的求最大子数组的C语言实现
#include#includeint *FindMaxCrossSubarray(int A[],int low,int mid,int high){ int lsum = -10000; int rsum = -10000; int sum = 0; int i; int *res; res = (int *)malloc(sizeof(int)*3); for(i =原创 2015-07-19 20:03:43 · 1268 阅读 · 0 评论 -
《算法导论》中的计数排序的C++实现
#include#includeusing namespace std;void CountSort(vector A, vector &B, int k,int n){ int i,j; vector C(k+1, 0); for (i = 0; i < n; i++) C[A[i]] = C[A[i]] + 1; for (j = 1; j <= k; j++) C原创 2015-08-25 16:16:06 · 477 阅读 · 0 评论 -
《算法导论》中的快速排序
期望时间复杂度为O(nlgn)#include#includeusing namespace std;int Partition(vector &A, int p, int r){ int i,j; int key,temp; i = p - 1; key = A[r]; //The key set A[r] value for (j = p; j <= r; j++)原创 2015-08-25 14:28:07 · 476 阅读 · 0 评论 -
《算法导论》中的查找任意顺序值的C++实现
//时间复杂度最坏为theta(n^2) 期望运行时间为O(n)#include#include#include#includeusing namespace std;//快速排序算法int Partition(vector &A, int p, int r){ int i, j; int key, temp; i = p - 1; key = A[r]; //The原创 2015-08-26 15:40:06 · 504 阅读 · 0 评论 -
《算法导论》的基数排序 C++实现
#include#includeusing namespace std;typedef struct Node{ int data; //数值 int ge; //位值 int shi; int bai;}Node;void CountSort(vector A, vector &B, int k,int n,int bit){ int i,j; vector原创 2015-08-25 17:56:01 · 1041 阅读 · 0 评论 -
《算法导论》的桶排序C++实现
#include#include#includeusing namespace std;//输入数组,和个数template void BucketSort(vector &A, int n){ int i ,j; vector B[7]; //桶容器 for (i = 0; i < n; i++) { int temp = n*A[i]; B[temp].pus原创 2015-08-26 10:57:11 · 453 阅读 · 0 评论 -
动态规划简单例子之硬币数量
如果我们有面值为1元、2元和5元的硬币若干枚,如何用最少的硬币凑够n元?这是典型的动态规划的问题,我们可以把问题分解为若干之问题,设pi为凑够i元所需的最少硬币的个数。那么当i > 5时有递推方程pi = min(pi-1,pi-2,pi-5)+1。由此递推方程就可以得出程序如下:#includeusing namespace std;int Min(int a,int b,int原创 2015-11-08 11:26:07 · 560 阅读 · 0 评论