Bucket Sort | A Helpful Line-by-Line Code Tutorial

import random
 
class Node:
    def __init__(self, key):
        self.key = key
        self.vertical = None
 
def insertItemBetween(first, current, last):
    first.vertical = current
    current.vertical = last
 
def addItemToList(nodes, val, index):
    node = Node(val)
    current = nodes[index]
    while not current.vertical == None:
        if val < current.vertical.key:
            insertItemBetween(current, node, current.vertical)
            #print("Inserted ", val, " in between")
            return
        else:
            current = current.vertical
    current.vertical = node
    #print("Inserted ", val, " at the end")
 
def main():
    maxValue = 100
    length = 10
    array = list()
    for x in range(0, length):
        array.append(random.randint(0,99))
    print("The array to be sorted") 
    print(array)
    nodes = list()
    for x in range(0, length):
        node = Node(0)
        nodes.append(node)  
    for x in range(0, length):
        val = array[x]
        index = (val*length)/maxValue   #hasher
        addItemToList(nodes, val, index)
    newarray = list()
    for x in range (0, length):
        current = nodes[x]
        current = current.vertical
        while not current == None:
            newarray.append(current.key)
            current = current.vertical
    print("The sorted array")
    print(newarray)
         
if __name__ == "__main__":
    main()