2016-07-25 7 views
0

Ich bin nach wie ein Einführungssortieralgorithmus in python3 aus einem Tutorial zu implementieren, aber ich kann nicht scheinen zu verstehen, warum es ist, „j - = 1“ in diesem Code und nicht j + = 1.Was macht die "j- = 1" in diesem Einfügesortieralgorithmus?

sample1 = [5,3,2,4,6] 

def insertion_sort(sample): 
    print("initial sample: ",sample) 

    for i in range(1,len(sample)): 
     j = i 
     while(j!=0 and sample[j] < sample[j-1]): 
      sample[j-1],sample[j] = sample[j],sample[j-1] 
      j -= 1 #why this and not j += 1 instead? 
    print("sorted sample: ",sample) 

insertion_sort (sample1)

+2

Da j _decreases_ von i auf 0, nicht von 0 bis i _increases_ zu schaffen. – Gassa

+0

Aber wenn ich bei 1 aus der for-Schleife beginnt, macht es nicht die nächste Iteration von j = 0? – Vaderstalk

+0

Für "i = 1", ja. Für "i = 2" ist die erste Sache, "j = 1" zu setzen. Für "i = 10" ist die erste Sache, "j = 9" zu setzen. – Gassa

Antwort

0

Da j aus dem Wert von i beginnt und geht bis auf 0.

Wenn Sie j um 1 erhöhen würde -wie Sie wollten Ihre j tun- jemals nie 0 erreichen so die j! = 0 in Ihrer while-Schleife wäre die ganze Zeit wahr, was Endlosschleife bedeutet.

0

Beispiel Insertion sort: enter image description here
Wie Sie sehen können, Einfügung beginnt Art, die aus dem zweiten Element im Gegensatz zu Auswahl sortieren. Sie beginnen also bei dem weiter steigenden i und reduzieren j von Position i bis 0. Daher wird in der i te Permutation werden Sie den niedrigsten Element bringt Sie auf den ersten Platz zu finden und eine sortierte Array der Größe i

def insertion_sort(sample): 
    print("initial sample: ",sample) 

    for i in range(1,len(sample)): 
     j = i #start from i and run till 0. 
     while(j!=0 and sample[j] < sample[j-1]): 
      sample[j-1],sample[j] = sample[j],sample[j-1] #swapping if element j-1 > element j to get lowest element on 1st place. 
      j -= 1 #from element i to element 0 
    print("sorted sample: ",sample)