简单算法

二分查找

 1 # Author:AlwaysLive
 2 #!/usr/bin/env python
 3 #_*_ coding:utf-8 _*_
 4 
 5 
 6 print("算法总结")
 7 """
 8 递归
 9     1.调用自身
10     2.结束条件
11 """
12 def func1(x):
13     if x > 0:
14         print(x)
15         func1(x-1)
16 
17 
18 """
19 二分查找
20     在有序的数列中,从中间位置断开,
21     判断需要寻找的数字是在前半部分还是在后半部分
22     直到找到需要的数据
23 """
24 def bin_search(data, value):
25     low = 0
26     high = len(data) - 1
27     while low <= high:
28         if low == high: # 如果只剩一个数字还没有匹配到的话,那么提示不存在
29             return None
30 
31         mid = (low + high) // 2
32         if data[mid] == value:
33             return mid
34         elif data[mid] < value:
35             low = mid + 1
36         else:
37             high = mid
38 
39 
40 # 现有一个学员信息列表(按id增序排列),格式为:
41 
42 def qus1():
43     def bin_search(data, value):
44         low = 0
45         high = len(data) - 1
46         while low <= high:
47             if low == high: # 如果只剩一个数字还没有匹配到的话,那么提示不存在
48                 return None
49 
50             mid = (low + high) // 2
51             if data[mid]['id'] == value:
52                 return mid
53             elif data[mid]['id'] < value:
54                 low = mid + 1
55             else:
56                 high = mid
57 
58 
59     studentInfo = [
60                     {'id':1001, 'name':"张三", 'age':20},
61                     {'id':1002, 'name':"李四", 'age':25},
62                     {'id':1004, 'name':"王五", 'age':23},
63                     {'id':1007, 'name':"赵六", 'age':33}
64     ]
65 
66     id = int(input("Please input student ID:"))
67     resIdIndex = bin_search(studentInfo, id)
68     print("ID:%s  姓名:%s  年龄:%s"%(studentInfo[resIdIndex]['id'], studentInfo[resIdIndex]['name'], studentInfo[resIdIndex]['age']))

 

冒泡排序

 1 # Author:AlwaysLive
 2 #!/usr/bin/env python
 3 #_*_ coding:utf-8 _*_
 4 
 5 
 6 import random
 7 
 8 # 列表相邻的两个书比较大小,将大的放在后面的位置,如此循环
 9 li = []
10 for i in range(1000):
11     li.append(random.randint(0, 1000000))
12 
13 liLen = len(li)
14 print(li)
15 def bubble_sort(li):
16     for i in range(liLen):
17         for j in range(liLen - i - 1):
18             if li[j] > li[j+1]:
19                 li[j], li[j + 1] = li[j + 1], li[j]
20 
21 # 冒泡排序优化,如果一次到头没有发现需要调整顺序的话,就停止冒泡
22 def bubble_sort_1(li):
23     for i in range(len(li)):
24         exchange = False
25         for j in range(len(li) - i -1):
26             if li[j] > li[j + 1]:
27                 li[j], li[j+1] = li[j+1], li[j]
28                 exchange = True
29         if not exchange:
30             break

 

插入排序

 1 # Author:AlwaysLive
 2 #!/usr/bin/env python
 3 #_*_ coding:utf-8 _*_
 4 
 5 
 6 import random
 7 
 8 # 列表被分为有序区和无序区两个部分。最初有序区只有一个元素。
 9 # 每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空。
10 
11 li = []
12 for i in range(100):
13     li.append(random.randint(0, 1000))
14 print(li)
15 
16 def insert_sort(li):
17    pass    正在研究。。。。
18 insert_sort(li)
19 print(li)

 选择排序

 1 # Author:AlwaysLive
 2 #!/usr/bin/env python
 3 #_*_ coding:utf-8 _*_
 4 
 5 
 6 import random
 7 
 8 # 循环列表,将列表中最小数值取出来,然后放到第一个位置
 9 li = []
10 for i in range(100):
11     li.append(random.randint(0, 1000))
12 print(li)
13 
14 def select_sort(li):
15     for i in range(len(li)):
16         tmpNum = i
17         for j in range(i + 1, len(li) - 1):
18             if li[tmpNum] > li[j]:
19                 tmpNum = j
20         li[i], li[tmpNum] = li[tmpNum], li[i]
21 select_sort(li)
22 print(li)

 

posted on 2017-05-22 19:46  何必从头  阅读(155)  评论(0编辑  收藏  举报

导航