有什么比起性能更重要呢? 简洁,费用?性能决定了程序是可行还是不可行。性能保证了用户体验的前提。java的性能弱于C语言3倍!,震惊了。。
1.Problem sorting
Input segment <a1,a2,...,an>
Output permutation <a1',a2',...an'>
$ a1'<=a2'<=....<=an'
1.1 插入排序
伪代码(pseudocode)
Insertion sort(A,n)
for j <- 2 to n
do key <- a[j]
int <- j-1
while i>0 and A[i]>key
do A[i+1]<-a[i]
i<-i-1
A[i+1]<-key
Ex 8 2 4 9 3 6
2 8 4 9 3 6
2 4 8 9 3 6
2 3 4 8 9 6
2 3 4 6 8 9
running time,根据输入数据来决定,一般来说都会去计算该值的最大值(upper bounds),即时间复杂度T(n),
1.2 渐进分析
- 不去关注依赖于计算机本身的常量
- 只关注运行时间的增加
渐近符号:θ,举个例子当存在3n^2+2n, n->∞,则其近似于θ(n^2)。
回到上述的插入排序,可知,其时间复杂度为θ(n^2)
1.3 归并排序(merge sort)
merge sort A[1,2,...,n]
1.if n=1, done
2.recursively sort
A[1...n/2] and A[n/2...n]
3.merge 2 sorted lists
当n->∞,其时间复杂度为θ(nlogn)。