比尔盖子 博客

Tag: 算法

一个不好的冒泡排序算法实现

最近在研究在研究Python,先是做了一个凯撒加密,现在则实现了冒泡排序算法。在实现这个算法时,坚决没有看现成的例子,完全是冒泡排序的文字叙述实现的。

因此,这个算法实现有很多没用的循环和判断,只是练习,在产品中使用肯定是不行的。另外代码中还包括性能统计swapwhiletime,分别计算的是数字的交换次数和循环的进入次数,通过此统计可以看出这个实现多么低效。

#!/usr/bin/python3
times=0
times2=0
swap=0
whiletime=0
list=[858282,4252,5825725,8752,-2825245,8725,-82257465]

while times2 < len(list) -1:
        whiletime+=1
        while times < len(list)-1:
                whiletime+=1
                times+=1
                if list[times-1] > list[times]:
                        swap+=1
                        a=list[times-1]
                        b=list[times]
                        list[times-1]=b
                        list[times]=a
        times2+=1
        times=0

print(list)
print('Swap times:',swap)
print('While times:',whiletime)

Python实现移位密码(凯撒密码)加密

实现移位密码,就是将字母从字母表中向左移动或向右移动。比尔盖子首先想到了ANSI码,但由于不知道怎么处理出界,因此又用列表解决问题。等修改完列表,突然又想到ANSI的解决方案。因此,才写了两个版本。大家根据需求用吧。如果有bug务必提出!

这里有两段代码可以实现,一个是用ANSI码实现;另一个是用列表实现。
但是这些代码一点都不“美”,还需修改。经过修改,已经有些完美了。

更新1:列表版的代码不但不美,而且还有bug,比尔盖子已经做了修改!
更新2:ANSI版的代码虽然实现简单,但是没有注释,而且有两个严重bug,比尔盖子也已经修改!
更新3:使用取余数来代替while循环减去26,在明文、密钥超长的情况下提速至少100倍;化简了ANSI版出界对折的公式。
更新4:重新实现了list版本的加密算法,性能又至少提升2倍。

注:无论代码里是否有声明, 这里的声明将覆盖掉其中的声明。
代码使用GPL v3或更高版本发布。

ANSI版:

这里的代码已经修改了,有了详细注释,而且修正了bug。
很抱歉,代码太多了,因此请去我的Github:https://github.com/biergaizi/caesar-encrypt/tree/查看各个版本,ANSI版的文件名叫”ansi.py”。

列表版:

这里的代码已经修改了,更加美,而且修正了bug。

新版

很抱歉,代码太多了,因此请去我的Github:https://github.com/biergaizi/caesar-encrypt/tree/查看各个版本,列表版的文件名叫”list.py”。

Copyright © 2022 比尔盖子 博客

Theme by Anders NorenUp ↑