http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_2_A
Bubble Sort
op.py
#!/usr/bin/python
i = input()
n = map(int, raw_input().split())
cnt=0
for i in xrange(len(n)):
for j in xrange(len(n)-1, i, -1):
if n[j] < n[j-1]:
n[j], n[j-1] = n[j-1], n[j]
cnt+=1
print ' '.join(map(str,n))
print cnt
a,b =b,a
Es ist erstaunlich, dass die Werte von a und b vertauscht werden.
if n[j] < n[j-1]:
n[j], n[j-1] = n[j-1], n[j]
Der Teil von vergleicht n [j], angegeben durch für j in ~, mit n [j-1], das als nächstes überprüft werden soll. Wenn Sie den kleineren Wert auf n [j-1] setzen, wird der kleinste Wert in der ersten Runde von hinten nach vorne in der Liste angezeigt.
Probenliste der ersten Runde der inneren Schleife.py
#6,Vergleiche 8 6 ist kleiner, also nicht ersetzen.
[2, 5, 3, 1, 7, 9, 10, 4, 6, 8]
#4,Vergleiche 6 4 ist kleiner, also nicht ersetzen.
[2, 5, 3, 1, 7, 9, 10, 4, 6, 8]
#10,Vergleiche 4 Da 4 kleiner ist, wurde es ersetzt.
[2, 5, 3, 1, 7, 9, 4, 10, 6, 8]
#9,Vergleiche 4 Da 4 kleiner ist, wurde es ersetzt.
[2, 5, 3, 1, 7, 4, 9, 10, 6, 8]
#7,Vergleiche 4 Da 4 kleiner ist, wurde es ersetzt.
[2, 5, 3, 1, 4, 7, 9, 10, 6, 8]
#1,Vergleiche 4 1 ist kleiner, ersetzen Sie es also nicht.
#Wechseln Sie von 4 zu 1 und gehen Sie.
[2, 5, 3, 1, 4, 7, 9, 10, 6, 8]
#3,Vergleiche 1. Ersetzt.
[2, 5, 1, 3, 4, 7, 9, 10, 6, 8]
#5,Vergleiche 1. Ersetzt.
[2, 1, 5, 3, 4, 7, 9, 10, 6, 8]
#2,Vergleiche 1. Es wurde ersetzt.
[1, 2, 5, 3, 4, 7, 9, 10, 6, 8]
Wenn eine kleinere Anzahl unterwegs ist, wechseln Sie zu Hoi Hoi und bringen Sie ihn nach vorne. Es ist garantiert, dass der kleinste Wert in der Liste in dieser ersten Runde vorne ersetzt wird (nicht wahr?). In der zweiten Runde erfolgt die Prüfung also einen Schritt zuvor.
Auszug
for i in xrange(len(n)):
#Jedes Mal, wenn Sie herumgehen, ist der Scheck bis zu einem Punkt.
#Weil es vorne einen kleineren Wert hat.
for j in xrange(len(n)-1, i, -1):
Wenn es vorbei zu sein scheint, habe ich versucht, es in der Mitte zu stoppen
for m in range(len(n)):
for j in range(len(n)-1, m, -1):
if n[j]<n[j-1]:
n[j],n[j-1]=n[j-1],n[j]
ans+=1
# print ans
if ans==chk: break
chk=ans
print ' '.join(map(str,n))
print ans
Ich habe alle Testfälle von Ichio AOJ bestanden, bin mir aber nicht sicher, ob das gut ist. Der Betrieb ist nicht garantiert.
AOJ Sort I - Selection Sort
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_2_B
Ja.
op.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
i = input()
n = map(int, raw_input().split())
cnt=0
#Ansicht von vorne in der Liste.
for i in xrange(len(n)):
#Merken Sie sich die Nummer, die Sie suchen
min=i
#Initialisieren Sie das Flag-Urteil mit 0
flag=0
#Zweiter und nachfolgender in der Liste(Ich gehe nach rechts, um herumzugehen)Von bis zum letzten
for j in xrange(i,len(n)):
if n[j]<n[min]:
#Merken Sie sich die Reihenfolge kleinerer Werte.
#Wenn dies der Fall ist, bedeutet dies, dass ein Ersatzverarbeitungskandidat vorhanden war. Setzen Sie daher ein Flag.
min=j
flag=1
#Tauschen Sie den für den ersten Vergleich verwendeten Wert gegen den kleinsten gefundenen Wert aus.
n[i],n[min]=n[min],n[i]
cnt+=flag
print ' '.join(map(str,n))
print cnt
Hmmm, False, True haben auch Werte von 0 und 1? Nutzen Sie das aus?
Recommended Posts