忙里偷闲,来回顾几个经典的算法,慢慢的把之前丢掉的东西捡回来,在理解中学习,在学习中实践,在实践中掌握。
今天写的是对一个简单的字符串排序,排序的 依据就是每个英文字母在字母表中的ASCII码大小排序的,算法可以对大小写字母同等处理,比如A和a的ascii值相差是32,那么在排序后的结果中A一定是出现在了a前面的,好了,原理很简单就不多解释了,直接看程序:
#!usr/bin/env python
#encoding:utf-8
'''
__Author__:沂水寒城
功能:对字符串进行快速排序输出
'''
def get_string_quick_sorted(one_str_list, left, right):
'''
输入:待排序的字符串列表,起始位置下标
输出:标志位下标位置,作为递归的划分界限
'''
start=left
end=right
tmp=one_str_list[start]
while start<end:
while one_str_list[end]>tmp and start<end:
end-=1
if start<end:
one_str_list[start]=one_str_list[end]
start+=1
while one_str_list[start]<tmp and start<end:
start+=1
if start<end:
one_str_list[end]=one_str_list[start]
end-=1
one_str_list[start]=tmp
return start
def test(one_str_list, left, right):
'''
递归排序的测试函数
'''
if left<right:
p=get_string_quick_sorted(one_str_list, left, right)
test(one_str_list, left, p-1)
test(one_str_list, p+1, right)
if __name__ == '__main__':
i=0
str_list=['bdsAFha','abcdf','mkjGSAid','hglopdm','mnsdgvjbn']
for one_str in str_list:
one_str_list=list(one_str)
test(one_str_list, 0, len(one_str_list)-1)
print i
print 'original_string is:', one_str
print 'sorted_string is:', ''.join(one_str_list)
i+=1
结果如下:
0
original_string is: bdsAFha
sorted_string is: AFabdhs
1
original_string is: abcdf
sorted_string is: abcdf
2
original_string is: mkjGSAid
sorted_string is: AGSdijkm
3
original_string is: hglopdm
sorted_string is: dghlmop
4
original_string is: mnsdgvjbn
sorted_string is: bdgjmnnsv
[Finished in 0.5s]
可以看到:结果均正确输出了,如果感兴趣的话可以拿去试验一下,只需要运行即可,结果都是一样的