![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
SelfLink
这个作者很懒,什么都没留下…
展开
-
三段分法
随便记录下一些简单算法: 大概就是一个数字数组{4,1.5,6,8,14,2,6,8,2,34,5,7,8} 输入关键字 把数组分法为 小于关键字在数组左边,等于中间,大于在右边~ 实现: #include #define LENGTH(type,point) (sizeof(point)/sizeof(type)) void Print(const int *原创 2014-01-11 23:22:12 · 452 阅读 · 0 评论 -
二分查找
int BinarySearch(const int *a,const int len, int key) { int mid = 0; int left = 0; int right = len-1; while(left<=right) { mid = left + (right - left) / 2; if(a[mid] < key)原创 2014-06-21 18:52:30 · 372 阅读 · 0 评论 -
求数组里出现一次的数字~其他数字出现两次~
int OnlyOnce(const int *a, int len) { int x = a[0]; for (int i = 1; i < len; i++ ) { x ^= a[i]; } return x; }原创 2014-06-16 14:54:01 · 367 阅读 · 0 评论 -
后序遍历的非递归实现
void PostOrder(Node *node) { node *cur = NULL; node *pre = NULL; stack s; s.push(node); while (!s.empty()) { cur = s.top(); if ((cur->left == NULL && cur->right == NULL) || (!pre && (p原创 2014-06-16 16:50:45 · 456 阅读 · 0 评论 -
快速排序
void Swap(int *l, int *r) { int tem = *l; *l = *r; *r = tem; } int Partition(int *a, int s, int e) { int key = a[e]; int i = s ; int j; for(j = s ; j < e; j++) { if( key < a[j]) Swap(原创 2014-05-10 22:31:32 · 429 阅读 · 0 评论 -
中序遍历的非递归实现
void InOrder(Node *node) { stack s; s.push(node); Node *p = node; while (!s.empty()) { while (p) { s.push(p); p = p->left; } if (s.empty()) { p = s.pop(); visit(p->value);原创 2014-06-16 16:28:24 · 502 阅读 · 0 评论 -
求数组里出现一次的数字~其他数字出现三次~
int singleNumber(int A[], int n) { int num = 0; int ret = 0; for(int i = 0; i < 32; i++) { num = 0; for(int j = 0; j < n; j++) {原创 2014-07-02 22:03:01 · 512 阅读 · 0 评论 -
KMP 算法
最近在看KMP算法~ 一头雾中原创 2014-05-21 14:30:13 · 465 阅读 · 0 评论 -
插入排序
void InsertSort(int *a, int len) { int i=0; for(i = 1; i < len ; i++) { int j = 0; int key = a[i]; for(j = i - 1 ; j >= 0 ; j--) { if(a[j] < key) break; a[j+1] = a[j]; }原创 2014-05-25 14:36:53 · 351 阅读 · 0 评论 -
冒泡排序
void BubbleSort(int *a, int len) { int i = 0; for(i = 0; i < len - 1; i++) { int j = 0; for( j = 0; j < len - i - 1; j++) { if(a[j] > a[j+1]) { int tem = a[j]; a[j] = a[j+1];原创 2014-05-25 14:35:47 · 344 阅读 · 0 评论 -
选择排序
void SelectSort(int *a, int len) { int i = 0; for( i = 0; i < len - 1; i++) { int j = 0; int min = i; for(j = i + 1; j < len; j++ ) { if( a[min] > a[j] ) min = j; } int tem =原创 2014-05-25 14:35:09 · 340 阅读 · 0 评论 -
前序遍历的非递归实现~(两种方法)
void PreOrder(Node *node) { stack s; s.push(node); Node *p = node; while (!s.empty()) { while (p) { visit(p->value); s.push(p); p = p->left; } if (s.empty()) { p = s.pop();原创 2014-06-16 16:26:58 · 700 阅读 · 0 评论 -
数组数对之差的最大值
int MaxSub(int *a,int len) { int maxS = a[0]; int sub = maxS-a[1]; int i = 1; for(; i < len; i++) { if(sub < (maxS-a[i])) sub = maxS-a[i]; if(maxS < a[i]) maxS = a[i]; } r原创 2014-06-25 22:38:08 · 576 阅读 · 0 评论 -
单链表的反转
void InitList(Node *pHead) { Node* pList = pHead; int i = 0; for(; i < 10; i++) { Node *pNode = new Node; pNode->data = i; pNode->next = NULL; pList->next = pNode; pList = pNode; } }原创 2014-05-17 12:14:26 · 397 阅读 · 0 评论 -
合并排序
void Merge(int *a, int s, int m, int e) { int lLen = m - s + 1; int rLen = e - m; int *l = new int[lLen]; int *r = new int[rLen]; int i = 0; for(i; i < lLen; i++) l[i] = a[s+i]; for(i = 0; i原创 2014-05-10 22:09:21 · 462 阅读 · 0 评论 -
全排列
void Range(int *a, int len,int s) { int i = 0; if(s == len-1) { Print(a,len); return; } for(i = s; i < len; i++) { Swap(&a[s],&a[i]); Range(a,len,s+1); Swap(&a[i],&a[s]); } }原创 2014-05-15 23:15:59 · 388 阅读 · 0 评论 -
堆排序
void AdjustHeap(int *a, int len, int i) { int left = i * 2 + 1; int right = i * 2 + 2; if( left >= len ) return; int largest; if(left a[i]) largest = left; if(right a[largest原创 2014-05-15 23:04:54 · 372 阅读 · 0 评论 -
公共子串
#include #include using namespace std; void SearchMax(const char *strA, int lenA,const char *strB, int lenB) { int i = 1; int j = 1; int sign[50][50] = {{0,0}}; for(; i < lenA; i++) { for(j原创 2014-05-18 20:27:55 · 362 阅读 · 0 评论 -
中序遍历 后序遍历 恢复二叉树
中序遍历 后序遍历 恢复二叉树 数组存储原创 2014-06-20 19:42:54 · 720 阅读 · 0 评论