哗啦啦Python之路 - Day 6 - 三种基础排序,递归,反射,模块
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哗啦啦Python之路 - Day 6 - 三种基础排序,递归,反射,模块相关的知识,希望对你有一定的参考价值。
1. 三种排序方式
- 冒泡排序:两两比较,大的排右边,每次冒出去一个泡
m = [1,2,6,5,4] for i in range(len(m)): for j in range(i): if m[j] > m[j+1]: m[j],m[j+1] = m[j+1],m[j] print(m)
- 选择排序
对于一组关键字{K1,K2,…,Kn}, 首先从K1,K2,…,Kn中选择最小值,假如它是 Kz,则将Kz与 K1对换;
然后从K2,K3,… ,Kn中选择最小值 Kz,再将Kz与K2对换。
如此进行选择和调换n-2趟,第(n-1)趟,从Kn-1、Kn中选择最小值 Kz将Kz与Kn-1对换,最后剩下的就是该序列中的最大值,
一个由小到大的有序序列就这样形成。
m = [1,4,6,2,5] for i in range(len(m)): min = i for j in range(i,len(m)): if m[min]> m[j]: min = j m[i],m[min] = m[min],m[i] print(m)
- 插入排序
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
1.从第一个元素开始,该元素可以认为已经被排序
2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,将该元素移到下一位置
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5.将新元素插入到该位置后
m = [1,4,6,2,5] for i in range(1,len(m)): save = m[i] j = i while j>0 and m[j-1]>save: m[j] = m[j-1] j-=1 m[j] = save print(m)
- 附:取一组随机数的方法
#http://blog.csdn.net/hinyunsin/article/details/6311707 import random def getrandata(num): a = [] i = 0 while i <num: a.append(random.randint(0,1000000)) i +=1 return a n = getrandata(5) print(n)
2. 递归
#1*2*3*4*5*6*7 def func(num): if num == 1: return 1 return num * func(num-1) x = func(7) print(x) print(1*2*3*4*5*6*7)
3. 反射
反射是基于字符串的形式去模块中操作其成员,主要就是attr系列。它的目的是简化代码,直接根据input的内容去模块里面找函数
以上是关于哗啦啦Python之路 - Day 6 - 三种基础排序,递归,反射,模块的主要内容,如果未能解决你的问题,请参考以下文章