哗啦啦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 - 三种基础排序,递归,反射,模块的主要内容,如果未能解决你的问题,请参考以下文章

Python之路,day6-Python基础

python之路,day3

python之路-Day5

python之路-day3

python 自动化之路 day 05

Python之路,Day3 - Python基础3 ——转自金角大王