冒泡排序算法的 python 实现与 C 的比较
昨天用c写了简单的冒泡排序算法之后,正好最近在学 python,也想试试用python实现一下。
总体感觉,对于这种简答的小程序,python 确实充分体现了他简洁,易懂的特点。写起来特别流畅,舒服。但是写完之后总感觉哪里有点别扭,就是可能用管了c,对于那种很强的逻辑顺序有着天然的倾向。
先设计好排序的函数,然后在主函数里调用,模块间的数据传递啊,地址传递啊,让我们不仅理解了程序,也对他底层的操作有了了解。比如一个交换数据函数,传递的必须是地址,只有这样才能正确的交换。不相信的客官看这里:
我把函数换成了仅仅是数据的交换,不交换地址,运行结果。。。。并没有什么卵用
这也就是为什么c是底层语言。学好c能让我们对计算机有很好的理解。
但是在python里面,特别方便,交换a,b的值,只需a ,b = b,a。是的 ,你没有看错,就是这样。简单虽然简单,但是我们并不知道他 的内部是怎么操作的。
还有一点就是主函数,可能是我刚开始学python,还没有摸透他的语法规则,之前写的程序都是没有主函数,让我很是不爽,主函数怎么能少了呢!!!!!
今天查了一下,才算明白 :
Python使用缩进对齐组织代码的执行,所有没有缩进的代码(非函数定义和类定义),都会在载入时自动执行,这些代码,可以认为是Python的main函数。
所以 python的执行不依赖于main函数,而且python从程序没有缩进的地方开始执行。
两种截然不同的编程风格,真是让人又爱又恨啊。
学习c是因为专业的需要。学习python是兴趣使然。
下面把两种代码都贴出来,便于读者比较分析。
python:
#2017.9.10 #冒泡排序算法 import time start = time.clock() #开始的时刻 def bubble(num): length = len(num) for i in range(length): for j in range(length-i-1): if num[j]>num[j+1]: num[j],num[j+1] = num[j+1],num[j] #python的数据交换格式,非常方便简洁,a,b = b,a 就可以了 return num nums = [2,70,49,35,25,56,39,40,100,58,37] print "原序列为:%r"%nums print "冒泡排序后:%r"%bubble(nums) end = time.clock() #结束时刻 print "程序运行时间为:%.5f s"%(end-start)
运行结果
c的程序可以看我的上一篇博客 。
虽千万里,吾往矣。