1 import random 2 import time 3 4 # randomly create integer list 5 def RandomList(): 6 data = [] 7 nLen = random.randint(20, 50) 8 for _ in range(nLen): 9 data.append(random.randint(0, 10000) ) 10 11 return data 12 13 14 # use radix sort 15 def RadixSort(data): 16 divider = 1 17 bCont = True 18 while bCont: 19 bCont = False 20 bucket = [list() for _ in range(10) ] 21 22 for a in data: 23 if a > divider * 10: 24 bCont = True 25 idx = int(a / divider) % 10 26 bucket[idx].append(a) 27 28 data = [] 29 for x in range(10): 30 tmp = bucket[x] 31 for a in tmp: 32 data.append(a) 33 34 divider *= 10 35 return data 36 37 38 # use binary Search 39 def BinarySearch(data, key): 40 left = 0 41 right = len(data) - 1 42 while left < right: 43 idx = int( (right + left) / 2) 44 if key is data[idx]: 45 return idx 46 elif key > data[idx]: 47 left = idx + 1 48 else: 49 right = idx - 1 50 51 return -1 52 53 54 # use Interpolation Search 55 def InterpolationSearch(data, key): 56 left = 0 57 right = len(data) - 1 58 while left < right: 59 idx = int( (right - left) * (key - data[left]) / (data[right] - data[left]) ) + left 60 if data[idx] is key: 61 return idx 62 elif data[idx] < key: 63 left = idx + 1 64 else: 65 right = idx - 1 66 return -1 67 68 69 a_list = RandomList() 70 key = a_list[0] 71 print(a_list) 72 73 t0 = time.time() 74 a_list = RadixSort(a_list) 75 t1 = time.time() 76 print(a_list) 77 print("RadixSort spent {} sec.".format(t1 - t0) ) 78 79 t0 = time.time() 80 index = BinarySearch(a_list, key) 81 t1 = time.time() 82 print("{} is at list {}".format(key, index) ) 83 print("BinarySearch spent {} sec.".format(t1 - t0) ) 84 85 t0 = time.time() 86 index = InterpolationSearch(a_list, key) 87 t1 = time.time() 88 print("{} is at list {}".format(key, index) ) 89 print("InterpolationSearch spent {} sec.".format(t1 - t0) )