算法
聚沙塔
这个作者很懒,什么都没留下…
展开
-
选择排序
选择排序(假设递增排序) 每次选取从当前结点到末尾结点中最小的一个与当前结点交换,每一轮固定一个元素位置。 时间复杂度O(n^2),空间复杂度O(1)。下面的示例代码以带头结点的链表为存储结构: #include #include #define Elemtype double struct Node { Elemtype data; struct Node *next; }; void原创 2014-10-10 20:32:26 · 1063 阅读 · 0 评论 -
快速排序
快速排序是基于分治思想的排序,以递增排序为例: 首先选取一个基准元素pivot,将小于pivot的元素移到其左侧, 大于pivot的元素移到其右侧。这一轮固定了pivot的位置。 然后对其左右两侧执行相同的操作。 快速排序平均时间复杂度O(nlogn),最差时间复杂度O(n^2);空间复杂度O(1)。 示例代码如下: #include #define Elemtype int int原创 2014-10-10 11:05:28 · 1063 阅读 · 0 评论 -
归并排序
归并排序是基于分治思想的排序,一递增排序为例: 首先将数组平分为两份,将左侧递增排序,右侧递增排序, 然后将两侧归并起来,使整体递增有序。 示例代码如下: #include #include #define Elemtype int Elemtype *B; void merge(Elemtype A[],int low,int mid,int high) { for(int i=l原创 2014-10-10 11:11:00 · 976 阅读 · 0 评论 -
Kruskal算法
Kruskal算法计算最小生成树,只与边有关,时间复杂度O(eloge) 步骤: 1.将边按权值递增排序 2.依次取出边加入最小生成树中并保证无环,判断是否成环可利用并查集。 例:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达原创 2014-10-01 17:09:50 · 1466 阅读 · 0 评论 -
动态规划:最大连续子序列乘积
题目描述: 给定一个浮点数序列(可能有正数、0和负数),求出一个最大的连续子序列乘积。 分析:若暴力求解,需要O(n^3)时间,太低效,故使用动态规划。 设data[i]:第i个数据,dp[i]:以第i个数结尾的连续子序列最大乘积, 若题目要求的是最大连续子序列和,则易确定状态转移方程为: dp[i]=max(data[i],dp[i-1]+data[i])(dp[i]为以第原创 2014-09-30 17:03:19 · 2636 阅读 · 2 评论