Member 13971234 Ответов: 2

Программа работает, когда n=3, но не тогда, когда больше 3


Программа вводит n номеров элементов в список
затем случайным образом выбирает два индекса в списке и сравнивает их переключает их в порядке возрастания
процесс повторяется до тех пор, пока список не будет отсортирован

Что я уже пробовал:

from random import randint
n=input()
n=int(n)
list_1=[]
for i in range (n):
  x=input()
  list_1.append(x)
k=2**n
for i in range (k):
    i=randint(0,n-1)
    j=randint(0,n-1)
    i=int(i)
    j=int(j)
    if(i>j):
        i,j=j,i
    print(list_1)
    print(i)
    print(j)
    if(list_1[i]>list_1[j]):
        list_1[i],list_1[j]=list_1[j],list_1[i]
print(k)

2 Ответов

Рейтинг:
2

Richard MacCutchan

Это потому, что ваш список содержит строки, а не целые числа. Сортировка в строковом порядке, "19" будет стоять перед "3" и т. д.


Рейтинг:
0

Patrice T

Цитата:
Программа работает, когда n=3, но не тогда, когда больше 3

Определить не получится! Приведите пример.
Цитата:
процесс повторяется до тех пор, пока список не будет отсортирован

Нет, ваш код не имеет никакого способа узнать, отсортирован ли список или нет.
Из-за случайного выбора позиций ничто не гарантирует, что вы эффективно отсортируете список.
Ваш код не детерминирован. это не метод сортировки списка.

Поскольку randint возвращает целое число, вы можете упростить свой код следующим образом:
i=randint(0,n-1)
j=randint(0,n-1)
i=int(i)
j=int(j)


Richard MacCutchan

Все гораздо проще, смотрите мое решение.

Patrice T

Я думаю, что эти 2 решения дополняют друг друга.

Richard MacCutchan

Да, я подумал об этом после того, как опубликовал вышеприведенный комментарий. Будем надеяться, что ОП прочитает и то, и другое.

Member 13971234

НОП удалением я=инт(я) и J=инт(Дж) не получилось

Patrice T

Привет Ричард,
Думал, читая, что randint уже возвращает целое число ?