Python学习——排序算法02

狡猾的人有千百种笑

听着赵雷的《阿刁》,里面唱着“阿刁,狡猾的人有千百种笑。你何时下山?记得带上卓玛刀。”是啊,狡猾的人有千百种笑,有机会去西藏带一把藏刀?这世界小人和狗一样多。

Python学习——排序算法02

计算机环境:

win10操作系统

pycharm工具

python 3.5.2

经过昨天的编程,今天看算法书籍,排序实际上是一种很基础的算法,除了昨天这种显得不是很经济的排序算法,可不可以写一种比较常规的排序算法。今天自己研究了一下,提出了一种遍历抽取最小值的算法,下面详细进行说明。

思路:

假设我们给出一个a[n]的数组,然后从第一个元素开始依次和后续元素进行比较,当遇到一个比自己大的元素的时候,二者互换位置。此时返回第一个元素(注意此时第一个元素已经变了),然后再依次和后续元素进行比较,当该元素不再与后续元素发生交换(证明该元素已经是所有元素最小的元素了)时,我们已经找到了这个数组的最小的元素。然后从后一个元素开始重复上一个步骤,只到所有的元素排序完成。思路总结起来就是:依次找到序列中最小的元素。

代码实现:

输入:

运行结果:

代码分析:

这次算是比较常规的排序算法了,只需要给出输入序列即可,对于有重复元素也是可以处理的,并且复杂度也比昨天的算法要低。算法其实就是按照上述的思路编的,倒是没有特别出彩的地方,有两点是需要注意的:

思维拓展:

1. 深入理解python的for循环,以及和C语言for循环的区别?

虽然python中for i in range(5)等于C语言中的for(i=0;i

这是一个正常的C语言程序:

运行结果:

我们将i = i+1的注释去掉,然后很容易想到加上这一句之后我们创造了以个无限的循环:

他的运行结果呢?很恐怖的事情发生了,如果我们不停止这个程序,他会一直在屏幕上打印1:(这也说明一件事,在for循环中如果不小心改变了循环变量将是一件很恐怖的事情,当我们创造了一个无限循环的时候,严重情况会把服务器卡到爆炸?)

但是这种情况在python是不存在的,可以看一个例子:

运行结果:

从结果上看,我们并没有创造一个可怕的无限循环,从网上搜索了原因之后,有大佬说python中for循环的range像是一个迭代器,只提供数而不改变数,所以我们在循环内部改变循环的值是不起作用的,所以有时不能完全把C语言的思维带入到python中,但是好在我们还有while循环可以用,支持我们完成了上述排序方式算法的编写。

2. 常用的python的for语句用法?

for i in range(5)

循环变量:0,1,2,3,4(一定要注意range(k)实际上循环变量只到k-1)

for i in range(3,6)

循环变量:3,4,5

当然for循环还有其他很多用法,比起C语言的for循环有时要更加方便强大的多,以后再慢慢总结。今天很重要的一点,for循环的循环变量在循环内是不可改变的!

3.关于break和continue的使用方法?

break和continue是C语言中就有的概念,主要用来跳出循环,但是在使用上二者还是有很大区别的。

break:跳出本循环或者结束本循环。

continue:结束该次循环返回循环继续执行。

continue的代码:

运行结果:当i是奇数时,continue跳出循环继续执行,continue下面的print语句没有被继续执行。

break的代码:

运行结果:结果显示在第二次循环执行完break语句后整个循环结束(即跳出循环)

今天的学习就到这,发现确实得自己去写代码才行,不然有些规则可能不能很好的理解。

生而有涯,学海无涯,继续努力!

每日一语

哪个人不是在拼尽全力的活着,生活已经很不容易了。

——走夜路的猫

每天都要进步一点!共勉!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180411G1HY1Z00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券