2013-11-09 5 views
0

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

def min_sorted(xs): 
    copy_list= xs 
    list=[] 
    while copy_list: 
     minimum=copy_list[0] 
     for i in copy_list: 
      if i < minimum: 
       minimum = i 
      if not i == minimum:  
       list.append(minimum) 
    print (list) 

это то, что я сделал, но это не сработало, как это может кто-нибудь чек для меня, пожалуйста?

ex: xs = [7, 8, 3, 1, 5] 

min_sorted([7, 8, 3, 1, 5]) ====> [1, 3, 5, 7, 8] 

xs ====>[7, 8, 3, 1, 5] 
+0

Вы пытаетесь использовать любой алгоритм, в частности? – Waclock

+0

есть довольно много проблем с этим кодом. – roippi

+0

приведенный выше код является катастрофой! даже не пытайтесь запустить его. – Developer

ответ

3

Так как вы хотите отсортировать по минимальному значению, это гораздо лучше использовать встроенный sorted метод, который предназначен именно для этой работы, а не собственной версии:

xs = [7, 8, 3, 1, 5] 

def sort_list(lst): 
    return sorted(lst) 

print sort_list(xs) 

Это выходы:

[1, 3, 5, 7, 8] 

Таким образом, он также оставляет ваш первоначальный список нетронутым, тоже.

Примечание:

По @Ramchandra Apte:

Обратите внимание, что сортируется() возвращает итератор в Python 3, так что если вы итерацию над этим итератора, она будет закончена, и не более значения могут быть , произведенные из итератора. Поэтому вы можете передать вывод отсортированный() в список().

+1

Обратите внимание, что 'sorted()' возвращает итератор в Python 3, поэтому, если вы перебираете этот итератор, он будет завершен, и никакие значения не могут быть получены из итератора. Поэтому вы можете передать вывод 'sorted()' в 'list()' –

+0

@RamchandraApte: Noted. – jrd1

+0

Похоже, он пытается реализовать конкретный алгоритм сортировки, вариант классического «выбора сортировки», я полагаю, для домашних заданий ... :) – dbra

1

Вы действительно можете сделать:

xs = [7, 8, 3, 1, 5] 
sorted_mintomax = sorted(xs) 
2
def min_sort(xs): 
    oxs = [] 
    txs = list(xs) 
    while txs: 
     midx = 0 
     for i, x in enumerate(txs[1:]): 
      if x < txs[midx]: 
       midx = i+1 
     oxs.append(txs.pop(midx)) 
    return oxs 
+1

... конечно алгоритм Timsort реализован в стандартном списке.sort fuction намного быстрее, но я полагаю, вам нужно реализовать этот вариант сортировки в качестве упражнения. – dbra

2

Основываясь на истории вопроса, это выглядит как проблема домашних заданий. Я предполагаю, что вам запрещено использовать sorted, как предложил jrd1. Если вы можете, определенно используйте sorted.

Selection Sort звучит так, как вы хотите.

0

Пузырьковая камера выдвигает минимальное значение на передний план, итерации назад по списку во внутреннем цикле и итерации вперед во внешнем контуре.

def min_sorted(xs): 
    xsort = [] 
    for x in xs: 
     xsort.append(x) 
    i = 0 
    while i < len(xsort)-1: 
     for j in range(len(xsort)-1, i, -1): 
      if xsort[j] < xsort[j-1]: 
       y = xsort[j-1] 
       xsort[j-1] = xsort[j] 
       xsort[j] = y 
     i = i + 1 
    return xsort 
xs = [7,8,3,1,5] 
sorted = min_sorted(xs) 
print(xs) 
print(sorted) 

OUTPUT:

[7, 8, 3, 1, 5, 9] 
[1, 3, 5, 7, 8, 9] 
Смежные вопросы