# Name: Rushil Umaretiya # Date: 9/29/2020 import random # print all items in one line with a tab or 3 to 4 spaces. def display(array): [print(i, end=" ") for i in array if i != 0] print() # sort the array by using heapsort algorithm. # use swap and heapDown def sort(array): sortHelper(array, 1, len(array)-1) def sortHelper (array, start, end): if end < 1: return swap(array, start, end) heapDown(array, start, end-1) sortHelper(array, start, end-1) # swap two items at position a and b in array # array is a list, a and b are integers def swap(array, a, b): array[a], array[b] = array[b], array[a] # heap down from k to size def heapDown(array, k, size): left, right = 2*k, 2*k+1 if left == size and array[k] < array[size]: # One child swap(array, k, left) elif right <= size: child = (left if array[left] >= array[right] else right) if array[k] < array[child]: swap(array, k, child) heapDown(array, child, size) # check all items in array. # Returns True if all items are in ascending order. def isSorted(array): if len(array) <= 1: return True return array[1:] == sorted(array[1:]) # use round(random.unifrom(from, to), 2) to assign new values in each cell def createRandom(array): for i in range(len(array)-1): array[i+1] = round(random.uniform(1,100), 2) # Make the given array as a max heap. Use heapDown. def makeHeap(array, size): for k in range(size//2, 0, -1): heapDown(array, k, size) def main(): array = [0.0]*101 createRandom(array) display(array) makeHeap(array, len(array)-1) display(array) sort(array) display(array) print(isSorted(array)) if __name__ == '__main__': main() ''' Sample output 15.36 38.17 58.13 59.72 84.46 6.77 72.38 92.32 48.53 46.59 12.68 15.6 36.55 55.51 68.78 91.3 96.35 53.01 62.4 4.12 53.27 36.61 87.25 98.7 58.46 7.19 36.51 31.73 61.75 43.94 76.1 7.55 46.47 14.9 75.97 4.39 96.78 32.97 3.86 55.28 40.99 76.06 33.9 17.0 82.2 30.35 49.85 54.93 78.24 19.22 98.36 20.73 55.19 17.98 61.77 3.77 17.16 29.2 64.7 49.35 13.44 97.75 21.87 55.29 77.09 70.75 31.78 90.42 86.74 26.31 92.45 7.44 97.05 42.43 22.97 92.51 39.43 38.58 15.27 57.41 78.49 55.65 89.27 84.8 75.52 65.33 58.08 3.86 32.1 90.31 91.24 32.41 65.28 19.51 84.68 69.37 5.51 68.73 12.86 21.51 98.7 97.05 98.36 96.78 91.24 78.24 97.75 96.35 92.51 89.27 90.31 69.37 61.77 64.7 76.1 91.3 92.45 59.72 62.4 78.49 84.8 84.46 87.25 68.73 58.46 55.19 36.55 31.73 61.75 49.35 72.38 77.09 70.75 90.42 92.32 53.01 48.53 39.43 38.58 57.41 55.65 76.06 65.33 32.1 82.2 65.28 84.68 58.13 15.6 21.51 6.77 20.73 7.19 17.98 36.51 3.77 17.16 29.2 55.51 43.94 13.44 68.78 21.87 55.29 7.55 46.47 31.78 14.9 86.74 26.31 75.97 7.44 4.39 42.43 22.97 32.97 38.17 3.86 15.27 46.59 55.28 4.12 40.99 53.27 75.52 33.9 58.08 3.86 17.0 36.61 12.68 32.41 30.35 19.51 49.85 54.93 5.51 15.36 12.86 19.22 3.77 3.86 3.86 4.12 4.39 5.51 6.77 7.19 7.44 7.55 12.68 12.86 13.44 14.9 15.27 15.36 15.6 17.0 17.16 17.98 19.22 19.51 20.73 21.51 21.87 22.97 26.31 29.2 30.35 31.73 31.78 32.1 32.41 32.97 33.9 36.51 36.55 36.61 38.17 38.58 39.43 40.99 42.43 43.94 46.47 46.59 48.53 49.35 49.85 53.01 53.27 54.93 55.19 55.28 55.29 55.51 55.65 57.41 58.08 58.13 58.46 59.72 61.75 61.77 62.4 64.7 65.28 65.33 68.73 68.78 69.37 70.75 72.38 75.52 75.97 76.06 76.1 77.09 78.24 78.49 82.2 84.46 84.68 84.8 86.74 87.25 89.27 90.31 90.42 91.24 91.3 92.32 92.45 92.51 96.35 96.78 97.05 97.75 98.36 98.7 True '''