算法
文章平均质量分 65
codePriest
void life(varin){ }
展开
-
ctime学习
static void test(void){ struct tm *timeinfo; time_t now; time(&now); timeinfo = localtime(&now); timeinfo->tm_year = 2015-1900; timeinfo->tm_mday = 13; long oneday_sec = dif原创 2015-06-12 17:56:21 · 281 阅读 · 0 评论 -
双链表 double linked list
double linked list原创 2015-08-23 22:27:26 · 602 阅读 · 0 评论 -
红黑树red-black-tree
(1)红黑树是在BST的基础上增加了一个color信息:用int color = 1代表黑色,int color = 0代表红色;(2)Rotation:void left_rotate(pnode &x){ if(x != nil){ pnode y = x->right; x->right = y->left; if(y->lef原创 2015-07-20 18:29:24 · 289 阅读 · 0 评论 -
正确的binary search tree -- 非递归插入
(1)定义一个链表式结构体,作为bst的节点node,key值为int(注意不要用string类作为后续red-black tree的color,?为什么不清楚?)typedef struct node{ int key; /*int color;*/ struct node *left; struct node *right; struct node *p;}*p原创 2015-07-20 17:56:17 · 436 阅读 · 0 评论 -
对binary-search-tree的tree-delete算法的更正
bst树的删除算法更正原创 2015-07-23 11:17:03 · 333 阅读 · 0 评论 -
red-black tree的删除节点算法
对于bst的tree_delete算法,若被删除节点 y 为黑色,那么 y 的替代者 x 节点的所有path都少了一个black-height高度。我们假定:node x has an "extra" black. 即:将 y 的blackness "push" 到它的子节点 x 身上。因此,x 节点是“双黑”或者“红-黑”。idea: move the extra black up th原创 2015-07-23 16:10:12 · 481 阅读 · 0 评论 -
用list实现桶排序
/**8/4/2015 更新 *桶的数目为array的长度n *见8.4 bucket sort int n = x.size(); int max = x.front(); int min = x.front(); for(int i = 0; i < n; i++){ if(x[i] > max) max =原创 2015-07-28 10:11:47 · 351 阅读 · 0 评论 -
约瑟夫问题循环链表解法、队列解法
(1)单链表解法:typedef struct node{ //定义单链表结构,next指向下一个节点 int key; node *next;}node,*pnode;void test(){ int n,m; cout>n; cout>m; cout<<"the kill list is: "; pnode ptr = (原创 2015-07-24 21:12:30 · 744 阅读 · 0 评论 -
扩充的数据结构-区间树interval-tree
(1)区间树所存的value为一个区间interval,其key值为interval的low值(即左值,由于树有左右节点,interval由low,high决定,避免混淆)(2)区间树还储存某节点 x 的所有子节点中最大值m,即m = m[x], or m = m[x->left], or m = m[x->right.m所带来的modifier操作的修改:旋转操作:pnode原创 2015-07-24 23:24:59 · 513 阅读 · 0 评论 -
用linked list实现binary-search-tree及其inorderwalk(中序遍历)
binary-search-tree, 结构体struct实现linked list原创 2015-07-16 12:10:38 · 389 阅读 · 0 评论 -
建立一个堆结构heap-build
int max_heapify(int *A, int i, int n){ int left = 2*i; int right = 2*i+1; int largest = i; if( A[ left-1 ] >= A[ i-1 ] && left <= n ) largest = left; if( A[ right-1 ] >= A原创 2015-06-06 15:54:37 · 2113 阅读 · 0 评论 -
快排
int part(int *x, int p, int q){ int pivot = x[p]; int i = p; int j = p+1; int temp = 0; for(j = p+1; j <= q; j++){ if(x[j] < pivot){ i++; temp = x[i原创 2015-05-31 15:12:23 · 310 阅读 · 0 评论 -
radix-sort基数排序 内部排序用count-sort
int radix_count_sort(int *A, int *d, int n){ //inner: count-sort int temp[n]; int k = 10; int Counter[k]; int i = 0, j = 0; for(i = 0; i < k; i++) Counter[i] = 0; fo原创 2015-06-07 20:43:39 · 510 阅读 · 0 评论 -
Joseph队列解法
int main(){ while(true){ int a = 0, b = 0; int numOfPeople = 0, numToSpare = 0; cout<<"input number of people:"; cin>>numOfPeople; cout<<"input number to s原创 2015-06-02 22:48:49 · 460 阅读 · 0 评论 -
快排的随机化算法
int randQuickSort(int *x, int p, int q){ if(p < q){ int rand_n = rand()%(q-p+1); //随机化选择交换pivot的位置 int temp = x[rand_n]; x[rand_n] = x[p]; x[p] = temp;原创 2015-05-31 20:24:21 · 393 阅读 · 0 评论 -
求primes的算法
primes算法,总结了用定义和合数引理判断质数的方法,并且利用建立bool型数组筛选得到质数的真值数组。原创 2015-06-12 20:25:50 · 568 阅读 · 0 评论 -
合并排序
int test(void){ int x[] = {3,2,1,6,3,7,5,1,9,21,97,32,5,4}; int n = (sizeof x)/4; mergeSort(x,0,n-1); for(int i = 0; i < n; i++) cout<<x[i]<<endl; return 0;}int mergeSor原创 2015-05-31 16:01:52 · 361 阅读 · 0 评论 -
堆排序heapsort
int heapsort(int *A, int n){ int i = 0; int count = n; build_heap(A, n); for(i = n; i > 0; i--){ int temp = A[0]; A[0] = A[i-1]; A[i-1] = temp; count--;原创 2015-06-06 17:44:52 · 293 阅读 · 0 评论 -
在数组A中寻找第k小的元素-最坏情况为线性时间的算法
I : 平均情况下的时间复杂度为:O(n) 期望值(expected); 最坏情况下的时间复杂度为:O(n的平方)即:每次对A划分为(0:n-1)函数命名为:find_k_th(A, p, q, k) //int value = find_k_th(A, p, q, k): value为从A[p]到A[q]中第k小的值可以从 random-quicksort 算法中(复杂度分析运用原创 2015-06-08 19:10:34 · 877 阅读 · 0 评论 -
线性时间排序-counting_sort
int count_sort(int *A, int n, int k){ int B[n]; int C[k+1]; for(int i = 0; i < k+1; i++) //initialize C[i]: A的每个值有0个 C[i] = 0; for(int i = 0; i < n; i++){ //将A的每个值的出现频率原创 2015-06-06 21:33:29 · 343 阅读 · 0 评论 -
循环链表的实现 (circularly linked list)
节点,和circularly list类C_list:typedef struct Node{ int key; struct Node *next;}Node,*pNode;typedef struct C_list{ pNode lastNode; C_list(); void insertAfter(Node &nod, Node &x);原创 2015-08-20 17:14:44 · 439 阅读 · 0 评论