通过对直接插入排序的分析,可知其时间复杂度为O(n2),但是,如果待排序序列为正序时,其时间复杂度可提高至O(n)。希尔排序正是对此进行改进的排序。希尔排序的核心理念与插入排序不同,它会首先比较距离较远的元素,而非相邻元素。通过定义一个间隔序列来表示在排序过程中进行比较的元素之间有多远的间隔。
下图演示了希尔排序中间隔序列是如何运行的:
下面我们通过js来实现希...
分类:
编程语言 时间:
2015-05-27 10:15:26
阅读次数:
205
动态规划是一种高效算法,常用来求解最优化问题。本例中以寻找最长回文子序列为例来设计动态规划算法最长回文子序列:回文是指正序与逆序相同的飞空字符串。比如civic,racecar自身都是自己的最长回文子序列。比如character的最长回文子序列为carac。动态规划一般分为四个步骤:1,刻画一个最优...
分类:
编程语言 时间:
2015-05-26 17:58:58
阅读次数:
141
求逆序对问题与解决方案原理
在一个数列中,如果规定从小到大为正序,那么如果排在后面的某个元素比前面的某一个元素小,那么就称这两个数构成一个逆序对,例如,数列5,4,3,2,1中,任一个数都与它前面的数构成逆序对,这个序列中一共就有1+2+3+4=10个逆序对,数列23541中有5个逆序对,那么任给定一个数列,如何知道有多少个逆序对呢?简单的方法是将每个元素与它后面的元素比较,然后就可以累加出总的...
分类:
其他好文 时间:
2015-05-22 09:52:32
阅读次数:
221
题意:给定一张图,按照输入的边逐个删除,求每次删除一条边之后图的联通块数量。
分析:反向并查集求联通分量,假设起始各个点都不连通,接着从最后一条边开始添加,如果新加入的边联通了两个联通块,则联通分量减1(保存在数组中),最后正序输出结果即可。
#include
#include
using namespace std;
int p[10005];
...
分类:
其他好文 时间:
2015-05-21 00:05:44
阅读次数:
427
最近一直在搞项目,突然发觉用block特别是只掉一次的时候比代理好用多了,废话不多说block遍历数组正序排序NSArray *orginKeys = [[orginDictM1 allKeys] sortedArrayUsingComparator:^NSComparisonResult(id o...
分类:
其他好文 时间:
2015-05-08 23:29:16
阅读次数:
123
输入一个正整数,用递归的方式输出该数的各位数字,要求正序、逆序都要输出。嗯这个只是训练递归用的一个小程序。 1 #include 2 void fun(int n); 3 void fun2(int n); 4 int main(int argc, char *argv[]) 5 { 6 ...
分类:
其他好文 时间:
2015-05-04 19:53:10
阅读次数:
131
题目链接:http://acdream.info/problem?pid=1076
这题DP的状态很好设计,dp[i][j]表示指令i的时候,全排列状态是j,全排列一共就120个,预处理出来就可以了
那么问题就在于对于一个指令怎么快速获得这个整个区间的置换乘积,这步其实利用一个线段树维护就可以了,但是要注意置换是不满足交换律的,所以正序逆序都要保存一遍
代码:
#include
#inc...
分类:
其他好文 时间:
2015-05-04 01:15:16
阅读次数:
208
1 #include 2 #include 3 #include 4 #include 5 const int N=10; //修改随机数据量 6 bool onOroff=1; ...
分类:
编程语言 时间:
2015-04-30 17:42:14
阅读次数:
115
1 #include 2 void PP(int n) 3 { 4 if(n==0) return; 5 PP(n/10); 6 printf("%d",n%10); 7 } 8 void NP(int n) 9 {10 if(n==0) return;11 ...
分类:
其他好文 时间:
2015-04-25 19:44:36
阅读次数:
115
这题是第二次做了,两次都不是独立完成,不过我发现我第一次参考的程序,也是参考老师(陈越)的范例做出来的。我对老师给的做了小幅修改,因为我不想有全局变量的的存在,所以我多传了三个参数进去。正序遍历每次都是从1到N吗?看题目我认为应该是,结果我错了,我是对比正确的程序一点点修改才发现的,不容易啊。下面是...
分类:
其他好文 时间:
2015-04-18 09:55:39
阅读次数:
122