Sto imparando di più su algoritmi e strutture dati.
Secondo Wikipedia e altre fonti affidabili, un ordinamento di inserimento ha una complessità temporale di caso peggiore di O (n < sup> 2 ). Sto provando a misurare quella complessità nel codice:
def swap(n, i, j):
first, second = n[i], n[j]
n[i] = second
n[j] = first
def insertion_sort(n):
size, steps = len(n), 0
for i in range(1, len(n)):
j = i
steps += 1
while j > 0 and n[j - 1] > n[j]:
swap(n, j - 1, j)
steps += 1
j = j - 1
return size, steps
print "size: %d, steps: %d" % insertion_sort([i for i in xrange(1000-1, -1, -1)])
Above è Python, un semplice metodo di scambio per scambiare valori a determinati indici e un semplice algoritmo di ordinamento di inserimento che contiene anche un conteggio del numero di iterazioni / operazioni eseguite.
La linea finale crea un array che assomiglia a [999, 998, ... 0]
, 1000 elementi nel peggiore ordine di classificazione: inverso.
Quando eseguo questo codice, vedo che per l'array di lunghezza 1000 ho eseguito 500499 passaggi per ordinarlo correttamente.
Ovviamente sto facendo qualcosa di sbagliato qui. Perché non vedo 1000 iterazioni 2 (100000) richieste, se si tratta del comportamento peggiore previsto?