
数据结构
Alice_991
一个人的世界~~
展开
-
插入排序
#include#includeusing namespace std;void InsertSort(int* a,int n){ int i,j; for(i=1;i<n;i++) { int tmp=a[i]; j=i-1; //往前寻找记录i的正确位置 while(j>=0&&tmp<a[j]原创 2015-07-15 10:11:29 · 321 阅读 · 0 评论 -
N个结点的连通图的边数问题
RT:在数据结构中,N个顶点的连通图至少要有(N-1)条边(也就是树)才能保证图为连通图.对于简单图而言至多有n*(n-1)/2条边,此时即是完全图.强连通图最多n(n-1)条边,最少n-1条边.强连通图:任意两个顶点都相互连通的图。e.g.: 15年腾讯软测的一道选择题原创 2015-09-05 11:13:08 · 27081 阅读 · 6 评论 -
动态规划之走格子不经过点P
转自:http://www.mamicode.com/info-detail-1005851.html解析: 8*6的矩阵,从左下角A到右上角B,一共需要走12步,其中5步向上,7步向右,因此总的走法一共有C(12,5)=792种,但题目规定不能经过P,因此需要减去经过P点的走法。经过P的路径分为两部分,从A到P,从P到B。 同理,从A到P的走法:C(6,2)=转载 2015-09-05 16:57:03 · 887 阅读 · 0 评论 -
最小生成树的两种算法
最小生成树:具有权最小的生成树。点击打开链接构造最小生成树:克鲁斯卡尔算法 和 普里母算法克鲁斯卡尔算法:按权值递增的次序选择合适的边来构造最小生成树。具体做法:1 按权值从小到大的顺序依次选取图G中的边,若选取的边未使生成的树T形成回路,则加入到树中,否则将其舍弃;2 重复步骤1,直到树T中包含(n-1)条边。普里母算法:按逐个将顶点连通的方式来构造最原创 2015-09-05 16:25:24 · 1178 阅读 · 0 评论 -
排序复杂度总结
原创 2015-09-09 21:06:27 · 499 阅读 · 0 评论 -
选择排序之堆排序(大顶堆)
RT#include#define N 8using namespace std;void SiftAdjust(int *scr, int low, int high);void HeapSort(int *scr, int n);void Print(int *scr, int n);void Swap(int *scr1, int *scr2);int main原创 2015-08-26 21:38:29 · 577 阅读 · 1 评论 -
剑指offer面七_用两个队列实现栈
#include#includeusing namespace std;template class MyStack{public: MyStack(); ~MyStack(); void append(const T& node); T deleteHead();private: queue queue1;转载 2015-05-15 16:14:09 · 360 阅读 · 0 评论 -
剑指offer面七_用两个栈实验一个队列
/*用两个栈实现队列。队里声明已给出,请实现它的两个函数appendTail和dleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能*/#include#include#includeusing namespace std;template class CQueue{public:CQueue(void);~CQueue转载 2015-05-15 16:19:13 · 449 阅读 · 0 评论 -
选择排序之直接选择排序
RT:#includeusing namespace std;void SelectSort(int* s,int n){ int i,j,Smallest; for(i=0;i<n-1;i++) { Smallest=i; for(j=i+1;j<n;j++) if(s[j]<s[Smallest])原创 2015-08-26 21:39:33 · 314 阅读 · 0 评论 -
选择排序
思想:逐个找出第i小的记录,并将其放到数组的第i个位置#includeusing namespace std;void SelectSort(int* s,int n){ int i,j,Smallest; for(i=0;i<n-1;i++) { Smallest=i; for(j=i+1;j<n;j++)原创 2015-07-14 22:11:46 · 335 阅读 · 0 评论 -
插入排序之希尔排序
#includeusing namespace std;void ShellSort(int *R,int len){ int d=len; while(d>1) { d=(d+1)/2; for(int i=0;i<len-d;i++) { if(R[i+d]<R[i])原创 2015-07-15 10:14:32 · 303 阅读 · 0 评论 -
快速排序
#include#includeusing namespace std;void QuickSort(int *a,int low,int high);int main(){ int a[]={4,5,8,3,6,7,9,5}; int len=sizeof(a)/sizeof(int); cout<<"Befor sort:"; for(int i=0;转载 2015-07-12 21:11:07 · 315 阅读 · 0 评论 -
将数组构建成大顶推
堆实际上是一棵完全二叉树大顶堆:任何一非叶节点的关键字不小于其左右孩子节点的关键字(即根节点的值>=其左右结点的值)小顶堆:任何一非叶节点的关键字不大于其左右孩子节点的关键字(即根节点的值)构建大小顶堆的方法:从根结点开始排序,调整为满足大(小)顶推的特点。e.g.1 将{36, 48, 48, 90, 88, 80, 76, 99}构建成大顶推说明:原创 2015-09-08 09:39:28 · 899 阅读 · 0 评论