2014-02-16 3 views
1

Я довольно новичок в программировании; Я изучал Python только несколько недель. Недавно мне было дано задание, которое просит меня создать список целых чисел, а затем вручную сортировать числа от самого низкого до самого высокого в отдельном списке.Вручную сортировать список из 10 целых чисел в python

import random 
unordered = list(range(10)) 
ordered = [] 
lowest = 0 
i = 0 

random.shuffle(unordered) 

lowest = unordered[0] 

while i in unordered: 
    if unordered[i] < lowest: 
     lowest = unordered[i] 
     i += 1 
    if i >= len(unordered): 
     i = 0 

ordered.append(lowest) 
unordered.remove(lowest) 
lowest = unordered[i] 

print(ordered) 

Это то, что у меня есть до сих пор, и, чтобы быть откровенным, оно совсем не работает. Псевдокод мне было дано это:

  • Создать пустой список для хранения заказанного элементы
  • Хотя все еще существуют элементы в неупорядоченном списке
    • Установить переменную, низкий, к первый элемент в неупорядоченном списке
    • Для каждого элемента в неупорядоченном списке
      • Если элемент меньше, чем самый низкий
      • Присвоить значение этого элемента к низшему
    • Append самым низким в упорядоченном списке
    • Удалить самое низкое из неупорядоченного списка
  • Распечатайте упорядоченный список

Самая большая проблема, с которой я столкнулся до сих пор, заключается в том, что мой счетчик не дает мне возможности выбрать наименьшее количество из моего списка неупорядоченным. И тогда у меня возникают проблемы с индексированием моего списка, то есть индекс выходит за пределы диапазона. Может ли кто-нибудь дать мне немного отзывов о том, где я ошибаюсь?

Кроме того, я получил эту информацию, который я не совсем уверен:

Вы можете использовать установленный метод для сортировки списка называется Выбор сортировки.

На этот раз я не должен использовать встроенные методы сортировки Python. Все это должно быть сделано вручную. Спасибо за любую помощь!

ответ

1

Вы только что получили некоторые из неправильном порядке: вы должны добавить в свой упорядоченный список каждый раз, когда вокруг

import random 
unordered = list(range(10)) 
ordered = [] 
i = 0 

random.shuffle(unordered) 

print unordered 
lowest = unordered[0] 

while len(unordered) > 0: 
    if unordered[i] < lowest: 
     lowest = unordered[i] 
    i += 1 
    if i == len(unordered): 
     ordered.append(lowest) 
     unordered.remove(lowest) 
     if unordered: 
      lowest = unordered[0] 
     i = 0 

print(ordered) 
+0

Спасибо JL, который работал как шарм! – Kordan9090

1

вы не должны создать новый алгоритм для списка сортировки, просто это реализовать один: http://en.wikipedia.org/wiki/Bubble_sort

+0

OP действительно имеет псевдо-код для реализации – poke

1

Я нашел, что это работает очень хорошо для любого количества входов

x = [3, 4, 100, 34, 45] 
    for i in range(len(x) - 1): 
     if x[i] > x[i + 1]: 
      x[i],x[i + 1] = x[i + 1], x[i] 
    print (x) 
+0

Отлично подходит для примера выше, но не для всех случаев.Если массив находится в порядке убывания, приведенный выше фрагмент не работает –

0

Приведенный выше код не будет Wor k, если у вас есть повторяющиеся элементы.

ordered=[] 
i=0 
j=0 
x = [100, 3, 4, 100, 34, 45] 
lowest=x[0] 
while len(x)>0: 
    for i in range(0,len(x)): 
     if x[i]<=lowest: 
      lowest=x[i] 
    ordered.append(lowest) 
    x.remove(lowest) 
    if len(x)>1: 
     lowest=x[0] 
print(ordered) 
+0

Можете ли вы объяснить свой ответ еще немного? –

Смежные вопросы