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

320 篇文章 85 订阅
151 篇文章 4 订阅

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

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

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

    

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Together_CZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值