数据结构与算法
文章平均质量分 58
待磨的咖啡豆
这个作者很懒,什么都没留下…
展开
-
插入排序
void InertSort(int a[],size_t la){ int key=0; for (size_t i=1;i=0&&key<a[j]) { a[j+1]=a[j]; --j; } a[j+1]=key; }}//降序void InertSort1(int a[],size_t la){ int key=0; for (size_t i原创 2013-08-27 22:28:28 · 418 阅读 · 0 评论 -
O(n)求最长回文字串
转载自:http://www.felix021.com/blog/read.php?2040Translated to ENGLISH源于这两篇文章: http://blog.csdn.net/ggggiqnypgjg/article/details/6645824http://zhuhongcheng.wordpress.com/2009/08/02/a-simple转载 2013-10-13 10:30:18 · 712 阅读 · 0 评论 -
二分查找计算平方根
double MySqrt(unsigned int n){ double low=0; double high=n; if (n<=4) { low=n/2; } else high=n/2; double sqrtValue=(low+high)/2; while((sqrtValue*sqrtValue>n?sqrtValue*sqrtValue-n:n-sqrt原创 2013-09-17 13:55:47 · 1625 阅读 · 0 评论 -
已知前序和中序,求后序遍历
通过简单例子可以分析出,先由前序找出当前根,再通过中序找出左右子树序列,然后递归输出左右子树,最后输出根#include "stdafx.h"#include using namespace std;void GetEnOrder(char* startPreOrder,char* endPreOrder,char* startInOrder,char* endInOrder)原创 2013-09-17 09:20:16 · 499 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
问题分析:可以借用快速排序的实现方法,将判断条件修改即可,之所以调用函数指针,是为了适应多种要求,例如“将负数都放在正数前面”,“将能被3整除的放在前面”#include "stdafx.h"#include using namespace std;void Sort(int arr[],int la, bool (*func)(int)){ int temp; int原创 2013-09-05 11:11:22 · 538 阅读 · 0 评论 -
最大流问题Ford-Fulkerson方法
原文地址:http://blog.csdn.net/smartxxyx/article/details/9293665图的匹配问题与最大流问题(二)——最大流问题Ford-Fulkerson方法分类: 算法 图论2013-07-10 18:22 181人阅读 评论(0) 收藏 举报本篇承接上一篇文章,主要讲解最大流问题的Ford-Fulker转载 2013-09-12 16:20:38 · 1087 阅读 · 0 评论 -
《剑指offer》之Excel列编码转换问题
题目描述:在Excel2003中,用A表示第1列,B表示第2列.......Z表示第26列,AA表示第27列,AB表示第28列......以此类推。写出一个函数,输入字母表示的编码,输出它是第几列。int TwentySix(char * arr,int la){ int result=0; int tempResult; for (int i=0;i<la;++i) {原创 2013-09-04 22:20:35 · 904 阅读 · 2 评论 -
迅雷笔试题的josephus问题实现
出题者好坏,看到题目都觉得用个循环链表很开心的就解决了,结果一看题目,一个next数组?!其实题目是循环链表的变种,即 第i个人的下一个人的编号为next[i] ,让后像处理链表一样处理数组就OK了。int josephus(int n,int s,int m){ int * next=new int[n]; assert(NULL!=next); for (int i=0原创 2013-09-10 16:07:49 · 806 阅读 · 0 评论 -
根据前序和中序遍历结果构造二叉树
思路:前序第一个元素作为根,从中序找出左子树和右子树的序列,递归构建子树TreeNode * Construct(int * preOrder,int * inOrder,int length){//根据前序和中序构造二叉树 if (preOrder==NULL||inOrder==NULL||length<=0) { return NULL; } return Constru原创 2013-09-07 22:39:16 · 550 阅读 · 0 评论 -
插入排序
int PARTITION(int a[],int p,int r){ //i指向小于x的最后一个值的下标 //j指向当前正在进行比较的元素下标 int temp; int i=p-1; int x=a[r]; for (int j=p;j<r;++j) { if (a[j]<=x) { ++i; temp=a[i]; a[i]=a[j]; a[j原创 2013-08-29 19:43:29 · 432 阅读 · 0 评论 -
堆排序
/*堆排序从数组的1开始,包含0的话没法计算儿子节点的位置*///调整大顶堆void MAX_HEAPIFY(int a[],size_t la,size_t i){ size_t lagest,l,r;//lagest存放最大元素的下标,l存放i的左孩子下标,r存放i的右孩子下标 l=2*i; r=2*i+1;//由于堆是一个完全二叉树的结构,则i的孩子如果存在,下标必为2i和2i原创 2013-08-28 21:43:20 · 629 阅读 · 0 评论 -
二路归并
#include "stdafx.h"#include //合并void MERGE(int a[],size_t beg,size_t mid,size_t en){ size_t lenl=mid-beg+1; size_t lenr=en-mid; int* L=(int*)malloc(sizeof(int)*lenl); int* R=(int*)malloc(sizeo原创 2013-08-27 22:32:02 · 410 阅读 · 0 评论 -
百度面试题目--删除字符串中嵌套的括号
题目要求:对形如"(1,2, 3,(4,5,(6,5),8,4)),(2,3,(1,2),4,5)"的字符串进行处理,如果存在括号嵌套情况(....(...)...),将里面的括号删除。处理思想:设置count,用来记录当前待匹配删除的‘(’的个数,count初值设为-1,这样是为了保证不会把最外层的括号给删除掉,当然,初值设为0,然后修改判断也可,只是意义表达会不明确,你说呢?每次读到一原创 2013-11-06 22:28:23 · 1826 阅读 · 0 评论