python递归实现快速对一个给定字符串排序输出

来源:互联网 发布:机器码破解软件下载 编辑:程序博客网 时间:2024/05/22 17:42

    忙里偷闲,来回顾几个经典的算法,慢慢的把之前丢掉的东西捡回来,在理解中学习,在学习中实践,在实践中掌握。

    今天写的是对一个简单的字符串排序,排序的 依据就是每个英文字母在字母表中的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 startdef 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

结果如下:

0original_string is: bdsAFhasorted_string is: AFabdhs1original_string is: abcdfsorted_string is: abcdf2original_string is: mkjGSAidsorted_string is: AGSdijkm3original_string is: hglopdmsorted_string is: dghlmop4original_string is: mnsdgvjbnsorted_string is: bdgjmnnsv[Finished in 0.5s]

    可以看到:结果均正确输出了,如果感兴趣的话可以拿去试验一下,只需要运行即可,结果都是一样的

    

原创粉丝点击