Python 算法

递归

程序本身自己调用自己称之为递归,类似于俄罗斯套娃,体现在代码中:用户执行最外(N)层函数,最外侧调用N-1层函数,N-1层函数调用N-2层函数...

利用函数编写如下数列:

斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368

1 def func(arg1,arg2):
2     if arg1 == 0:
3         print arg1, arg2
4     arg3 = arg1 + arg2
5     print arg3
6     func(arg2, arg3)
7 
8 func(0,1)
Demo

冒泡排序

冒泡排序是排序中经典排序之一,它利用相邻元素比较并进行位置的互换...

需求:请按照从小到大对列表 [13, 22, 6, 99, 11] 进行排序

思路:相邻两个值进行比较,将较大的值放在右侧,依次比较!

第一步
 1 li = [13, 22, 6, 99, 11]
 2 
 3 for m in range(4):     # 等价于 #for m in range(len(li)-1):
 4     if li[m]> li[m+1]:
 5         temp = li[m+1]
 6         li[m+1] = li[m]
 7         li[m] = temp
 8 
 9 for m in range(3):     # 等价于 #for m in range(len(li)-2):
10     if li[m]> li[m+1]:
11         temp = li[m+1]
12         li[m+1] = li[m]
13         li[m] = temp
14 
15 for m in range(2):     # 等价于 #for m in range(len(li)-3):
16     if li[m]> li[m+1]:
17         temp = li[m+1]
18         li[m+1] = li[m]
19         li[m] = temp
20 
21 for m in range(1):     # 等价于 #for m in range(len(li)-4):
22     if li[m]> li[m+1]:
23         temp = li[m+1]
24         li[m+1] = li[m]
25         li[m] = temp
26 print li
第二步
1 li = [13, 22, 6, 99, 11]
2 
3 for i in range(1,5):
4     for m in range(len(li)-i): 
5         if li[m] > li[m+1]:
6             temp = li[m+1]
7             li[m+1] = li[m]
8             li[m] = temp
第三步

选择排序

选择排序,顾名思义先 创建一个特殊的变量:

  • 选择第一个值的索引赋值给特殊变量,然后循环其他索引并进行值的比较,如果特殊变量对应的值 > 循环的值,那么将当前值的索引放入变量中,继续向后比较
  • 选择第二个值的索引赋值给特殊变量,...
  • ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def select_sort(args):
    """
    选择排序
    :param args: 要进行排序的列表
    :return: 排序之后的列表
    """
    for in range(0len(args)-1):
 
        min_val_index = j
        for in range(j+1len(args)):
            if args[i] < args[min_val_index]:
                min_val_index = i
 
        temp = args[min_val_index]
        args[min_val_index] = args[j]
        args[j] = temp
 
    return args
 
 
lis = [1077124388188236]
 
result = select_sort(lis)
 
print(result)

插入排序

插入排序有两个特点:

  • 从前向后两两比较
  • 永远保证左边是有序的

其实插入排序就是维护一个有序的序列,并且有一个人在不停的抛出新的值,然后有序的序列开始去检测新值,将其添加到有序序列中的合法位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def insert_sort(args):
    """
    插入排序
    :param args: 要排序的列表
    :return: 排序成功后的列表
    """
    for in range(1len(args)):
 
        for in range(i-1-1-1):
            if args[j] > args[j+1]:
                temp = args[j]
                args[j] = args[j+1]
                args[j+1= temp
            else:
                break
 
    return args

  

 

 

持续更新中...

posted @ 2017-11-24 17:44  俊豪郎  阅读(109)  评论(0编辑  收藏  举报