""" analyzing the insertion sort """ from random import shuffle def insert_sort(numbers): """ return sorted list >>> insert_sort([2,10,3,5]) [2, 3, 5, 10] """ for i in xrange(1, len(numbers)): # i is 0 to len-1 ; # put numbers[i] in correct place j = 0 while numbers[j] < numbers[i]: j += 1 numbers.insert(j, numbers.pop(i)) return numbers def insert_steps(numbers): """ return steps taken to sort list >>> insert_sort([2,10,3,5]) """ steps = 0 for i in xrange(1, len(numbers)): # i is 0 to len-1 ; # put numbers[i] in correct place j = 0 while numbers[j] < numbers[i]: steps += 1 j += 1 steps += 2 numbers.insert(j, numbers.pop(i)) return steps def random_list(size): return shuffle(range(size)) # or something like this # return [randint(100) for i in xrange(size)] def main(): print "n,steps" for repitions in xrange(4): for size in [3, 10, 30, 100, 300, 1000]: rand_list = random_list(size) steps = insert_steps(rand_list) print "{},{}".format(size, steps) if __name__ == "__main__": import doctest doctest.testmod()