作者:dawncold
发布时间:February 3, 2012
分类:技术
No Comments
其实和昨天的归并排序基本内容一样,就多加了几行输出来帮助理解,找逆序对就是多了一个统计变量而已。
#! /usr/bin/env python
# coding: utf-8
def merge(arraylist, first, middle, last):
temp = []
i = first
j = middle + 1
while i <= middle and j <= last:
if arraylist[i] <= arraylist[j]:
temp.append(arraylist[i])
i += 1
else:
global inv
inv += middle - i + 1
temp.append(arraylist[j])
j += 1
while i <= middle:
temp.append(arraylist[i])
i += 1
while j <= last:
temp.append(arraylist[j])
j += 1
print temp
for i in range(0, last - first + 1):
arraylist[first + i] = temp[i]
def merge_sort(arraylist, first, last):
if first < last:
middle = (first + last) / 2
print "first = %d, middle = %d, last = %d" % (first, middle, last)
merge_sort(arraylist, first, middle)
merge_sort(arraylist, middle + 1, last)
merge(arraylist, first, middle, last)
if __name__ == "__main__":
inv = 0
arr = [2,3,8,6,1]
print "orign: ", arr
merge_sort(arr, 0, len(arr) - 1)
print "final: ", arr
print "inv = %d" % inv
作者:dawncold
发布时间:February 2, 2012
分类:技术
No Comments
#! /usr/bin/env python
# coding: utf-8
def merge(arraylist, first, middle, last):
temp = []
i = first
j = middle + 1
while i <= middle and j <= last:
if arraylist[i] <= arraylist[j]:
temp.append(arraylist[i])
i += 1
else:
temp.append(arraylist[j])
j += 1
while i <= middle:
temp.append(arraylist[i])
i += 1
while j <= last:
temp.append(arraylist[j])
j += 1
for i in range(0, last - first + 1):
arraylist[first + i] = temp[i]
def merge_sort(arraylist, first, last):
if first < last:
middle = (first + last) / 2
merge_sort(arraylist, first, middle)
merge_sort(arraylist, middle + 1, last)
merge(arraylist, first, middle, last)
if __name__ == "__main__":
arr = [33, 31, 0, 42, 425, 21, 34, 19]
print arr
merge_sort(arr, 0, len(arr) - 1)
print arr
谢谢这里的帮助,我自己照着《算法导论》写了好久都出错,哎,自己在这类问题上有点笨。
作者:dawncold
发布时间:January 26, 2012
分类:技术
No Comments
rebase被人翻译成衍合,是和merge功能差不多的一种操作,但提醒一点,进行rebase的内容一定不可以是提交到公共服务器上的内容,简单讲就是rebase操作你在本地自己玩就好了。
详细点的说明去这里看吧:http://progit.org/book/zh/ch3-6.html
作者:dawncold
发布时间:January 26, 2012
分类:技术
No Comments
分支的使用比较繁杂,前面光说了一些皮毛,现在记录一下分支的管理部分。
查看分支的详细信息:git branch -v,列出分支最后提交的内容,带星号表示当前分支。
查看哪些分支已经被并入当前分支:git branch --merged,也就是说除了那个带星号的分支都是可以删除(-d)的,因为都合并进来了嘛!查看没合并进来的就是--no-merged开关。删除那些没有合并进来的分支会提示错误,但强制删除就可以了,强制删除用-D开关。
不得不说的远程分支
在github创建了一个项目,在项目管理中开启了github Pages服务,这是个给项目做介绍页面的服务,开启后出现了一个远程分支gh-pages,但本地根本访问不到。首先我们应该明确,这个分支暂时不在我们本地,除非你是在这个服务开启后clone了项目,这样肯定有,否则和我一样的话(从本地push过去的),需要先fetch过来这些远程分支:git fetch origin gh-pages:gh-pages。后面两个由冒号分隔的意思是获取origin中的gh-pages分支,放到本地,在本地也叫gh-pages(冒号右侧),当然你可以根据需要更改冒号右侧的本地分支名字。现在查看一下本地分支就能发现出现两个分支了,切换过去后就能看到github给我们生成的index.html文件,你可以编辑了:)
推送本地分支到远程分支的时候可以像上面这样写:git push origin xxx1:xxx2,意思就是推送本地叫xxx1的分支到origin中,推过去叫xxx2,但此处一般简写,光写本地分支名,这样远程分支中的名字也是和本地一样的。
删除远程分支的命令挺好玩的:git push origin :xxx,在xxx左边冒号左侧有一个空格,意思是把本地的空分支推到远程的xxx分支上,就是删除xxx分支的意思。
作者:dawncold
发布时间:January 26, 2012
分类:技术
No Comments
在git中分支是一个变态技能!
创建分支:git branch [branch-name]即可。

git中有个叫master的分支,这是默认的,刚刚创建了一个testing分支,所以这两个指向是一样的,因为刚刚就在master分支下。但是git为何知道我在master呢?因为还有个叫HEAD的默认指针指向了当前正在使用的分支,所以当你切换分支的时候HEAD就会指向新的地方。
切换分支:git checkout [branch-name](git checkout -b [branch-name]可以实现新建并切换到此分支)切换分支时最好保持暂存区清洁,否则有可能产生冲突阻止你切换。
当我们切换到了testing分支后,再做一些提交,我们的testing分支会继续往下走,但master分支还停留在刚才离开的地方,如果我们需要回去,只需要再切换回master分支即可屏蔽刚才所作的提交,保持文件的原始性。
合并分支:git merge [branch-name],把分支合并到你现在所在的那个分支中,可别合并反喽,当然我感觉反了也没关系,就是个名字的问题吧?
分支删除用-d开关,git branch -d [branch-name]即可。
合并分支的时候遇到冲突是不可避免的,有些冲突能够自动解决,但还有不少是需要我们手动解决的,此时git会在status中告诉我们,我们打开后就能看到由“=====”分割开的两部分,就是让我们选择,等手动修改好后需要再add进暂存区,此时就能提交了。
- «
- 1
- 2
- 3
- 4
- 5
- ...
- 47
- »