Pomoc w dokończeniu kodu

0

Chciałem napisać kod, który ma za zadanie uporządkować liczby podane w liście od najmniejszej do na największej. Kod w tym momencie wygląda tak:

numbers = [1,2,56,32,51,2,8,92,15]
print(numbers)
iterations = 1
N = 9
if iterations < len(numbers):
    j = 0
    while j <= N - 2:
        numbers[j] > numbers[j+1]
        temp = numbers[j + 1]
        numbers[j + 1] = numbers[j]
        numbers[j] = temp
        j = j + 1
        iterations = iterations + 1
        print(numbers)

niestety po uruchomieniu terminal pokazuje, że jedynie pierwsza liczba jest "przestawiana" w każdym powtórzeniu. Co zrobić żeby skrypt posortował podane liczby?

1
numbers = sorted(numbers)
0
Spine napisał(a):
numbers = sorted(numbers)

Dzięki za szybką odpowiedź. Nie wspomniałem, że skrypt musi być napisany według konkretnego flowchartu. Samo podanie komendy sortowania nie rozwiązuje mojego problemu. Chodzi o to aby napisać taki skrypt według wzoru. Wszystkie zmienne spisane są właśnie z tego flowchartu jednak coś pominąłem i nie wiem jak to wszystko poustawiać aby działało.
Skrypt powinien działać tak, że stopniowo kilka razy przechodzi przez pętlę i przestawia liczby.

2

W takim razie chyba tak:

numbers = [1,2,56,32,51,2,8,92,15]
print(numbers)
iterations = 0
N = len(numbers)
while iterations < N:
	j = 0
	while j <= N - 2:
		if numbers[j] > numbers[j + 1]:
			temp = numbers[j + 1]
			numbers[j + 1] = numbers[j]
			numbers[j] = temp
		j += 1
	iterations += 1
	print(numbers)

Chociaż lepiej z pętlami for:

numbers = [1,2,56,32,51,2,8,92,15]
print(numbers)
N = len(numbers)
for iterations in range(0, N):
	for j in range(0, N - 1):
		if numbers[j] > numbers[j + 1]:
			temp = numbers[j + 1]
			numbers[j + 1] = numbers[j]
			numbers[j] = temp
	print(numbers)

Można to jeszcze zoptymalizować. W przebiegu, w którym nie było swapa, można już nie robić nowych iteracji:

numbers = [1,2,56,32,51,2,8,92,15]
print(numbers)
N = len(numbers)
for iterations in range(0, N):
	swap = False
	
	for j in range(0, N - 1):
		if numbers[j] > numbers[j+1]:
			temp = numbers[j + 1]
			numbers[j + 1] = numbers[j]
			numbers[j] = temp
			swap = True
			
	print(numbers)
	
	if not swap:
		break
1

Dzięki wielkie wszystko działa jak należy

2

Jak, że to Python to można jeszcze zrezygnować ze zmiennej temp.

numbers = [1,2,56,32,51,2,8,92,15]
print(numbers)
N = len(numbers)
for iterations in range(0, N):
    swap = False
    for j in range(0, N - 1):
        if numbers[j] > numbers[j + 1]:
            numbers[j + 1], numbers[j] = numbers[j], numbers[j + 1]
            swap = True
    print(numbers)
     
    if not swap:
        break
   

1 użytkowników online, w tym zalogowanych: 0, gości: 1