狡猾的人有千百种笑
听着赵雷的《阿刁》,里面唱着“阿刁,狡猾的人有千百种笑。你何时下山?记得带上卓玛刀。”是啊,狡猾的人有千百种笑,有机会去西藏带一把藏刀?这世界小人和狗一样多。
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语句后整个循环结束(即跳出循环)
今天的学习就到这,发现确实得自己去写代码才行,不然有些规则可能不能很好的理解。
生而有涯,学海无涯,继续努力!
每日一语
哪个人不是在拼尽全力的活着,生活已经很不容易了。
——走夜路的猫
每天都要进步一点!共勉!
领取专属 10元无门槛券
私享最新 技术干货