search
View Code
1 import time 2 import random 3 def cal_time(func): 4 def wrapper(*args, **kwargs): 5 t1 = time.time() 6 result = func(*args, **kwargs) 7 t2 = time.time() 8 print("%s running time: %s secs." % (func.__name__, t2 - t1)) 9 return result 10 return wrapper 11 @cal_time 12 def bin_search(data_set, val): 13 low = 0 14 high = len(data_set) - 1 15 while low <= high: 16 mid = (low+high)//2 17 if data_set[mid] == val: 18 return mid 19 elif data_set[mid] < val: 20 low = mid + 1 21 else: 22 high = mid - 1 23 return 24 def binary_search(dataset, find_num): 25 if len(dataset) > 1: 26 mid = int(len(dataset) / 2) 27 if dataset[mid] == find_num: 28 #print("Find it") 29 return dataset[mid] 30 elif dataset[mid] > find_num: 31 return binary_search(dataset[0:mid], find_num) 32 else: 33 return binary_search(dataset[mid + 1:], find_num) 34 else: 35 if dataset[0] == find_num: 36 #print("Find it") 37 return dataset[0] 38 else: 39 pass 40 #print("Cannot find it.") 41 @cal_time 42 def binary_search_alex(data_set, val): 43 return binary_search(data_set, val) 44 def random_list(n): 45 result = [] 46 ids = list(range(1001,1001+n)) 47 a1 = ['zhao','qian','sun','li'] 48 a2 = ['li','hao','',''] 49 a3 = ['qiang','guo'] 50 for i in range(n): 51 age = random.randint(18,60) 52 id = ids[i] 53 name = random.choice(a1)+random.choice(a2)+random.choice(a3) 54 data = list(range(100000)) 55 print(bin_search(data,69 )) 56 print(binary_search_alex(data,69 ))
sort
View Code
1 import random 2 import time 3 import copy 4 import sys 5 def cal_time(func): 6 def wrapper(*args, **kwargs): 7 t1 = time.time() 8 result = func(*args, **kwargs) 9 t2 = time.time() 10 print("%s running time: %s secs." % (func.__name__, t2 - t1)) 11 return result 12 return wrapper 13 @cal_time 14 def bubble_sort(li): 15 for i in range(len(li) - 1): 16 for j in range(len(li) - i - 1): 17 if li[j] > li[j+1]: 18 li[j], li[j+1] = li[j+1], li[j] 19 @cal_time 20 def bubble_sort_1(li): 21 for i in range(len(li) - 1): 22 exchange = False 23 for j in range(len(li) - i - 1): 24 if li[j] > li[j+1]: 25 li[j], li[j+1] = li[j+1], li[j] 26 exchange = True 27 if not exchange: 28 break 29 def select_sort(li): 30 for i in range(len(li) - 1): 31 min_loc = i 32 for j in range(i+1,len(li)): 33 if li[j] < li[min_loc]: 34 min_loc = j 35 li[i], li[min_loc] = li[min_loc], li[i] 36 def insert_sort(li): 37 for i in range(1, len(li)): 38 tmp = li[i] 39 j = i - 1 40 while j >= 0 and li[j] > tmp: 41 li[j+1]=li[j] 42 j = j - 1 43 li[j + 1] = tmp 44 def quick_sort_x(data, left, right): 45 if left < right: 46 mid = partition(data, left, right) 47 quick_sort_x(data, left, mid - 1) 48 quick_sort_x(data, mid + 1, right) 49 def partition(data, left, right): 50 tmp = data[left] 51 while left < right: 52 while left < right and data[right] >= tmp: 53 right -= 1 54 data[left] = data[right] 55 while left < right and data[left] <= tmp: 56 left += 1 57 data[right] = data[left] 58 data[left] = tmp 59 return left 60 @cal_time 61 def quick_sort(data): 62 return quick_sort_x(data, 0, len(data) - 1) 63 @cal_time 64 def sys_sort(data): 65 return data.sort() 66 def sift(data, low, high): 67 i = low 68 j = 2 * i + 1 69 tmp = data[i] 70 while j <= high: #只要没到子树的最后 71 if j < high and data[j] < data[j + 1]: 72 j += 1 73 if tmp < data[j]:#如果领导不能干 74 data[i] = data[j] #小领导上位 75 i = j 76 j = 2 * i + 1 77 else: 78 break 79 data[i] = tmp 80 def heap_sort(data): 81 n = len(data) 82 for i in range(n // 2 - 1, -1, -1): 83 sift(data, i, n - 1) 84 for i in range(n - 1, -1, -1): 85 data[0], data[i] = data[i], data[0] 86 sift(data, 0, i - 1) 87 sys.setrecursionlimit(100000) 88 data = list(range(1000, 1, -1)) 89 data.sort() 90 #random.shuffle(data) 91 data1 = copy.deepcopy(data) 92 data2 = copy.deepcopy(data) 93 data3 = copy.deepcopy(data) 94 bubble_sort(data1) 95 quick_sort(data2) 96 sys_sort(data3)
PPT