二分查找
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)