2015-10-19 4 views
0

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

list1 = [14,3,2,21,23,12,3,4]#unsorted array 
z = 3 
for i in range(len(list1)): 
    for j in range(i, len(list1)): 
     if list1[i] < list1[j]:  
      list1[i], list1[j] = list1[j], list1[i] 

print(list1) 

Проблемы я «Стоит посмотреть, чтобы получить самые высокие предметы. то есть, не печатать самый высокий пункт до тех пор индекс г

Так должен напечатать:

[23,21,14] 

Она должна возвращать число элементов сравнений (но должен быть алгоритм сортировки выбор). И не следует делать больше сравнений, чем это необходимо (следует остановить алгоритм, как только будет найден самый высокий элемент z).

Обновление: Я попытался настроить интерактивную реализацию python ... Я просто не могу получить свою голову вокруг него

это то, что я есть

def selectionSort(alist, k): 
    count = 0 
    while count < k: 
     for fillslot in range(len(alist)-1,0,-1): 
      print(count) 
      count += 1 
      positionOfMax = 0 
      for location in range(1,fillslot+1): 
       if alist[location] < alist[positionOfMax]: 
        positionOfMax = location 

      temp = alist[fillslot] 
      alist[fillslot] = alist[positionOfMax] 
      alist[positionOfMax] = temp 

alist = [54,26,93,17,77,31,44,55,20] 
selectionSort(alist , 3) 
print(alist) 

Печатается:

0 
1 
2 
3 # should it not stop here since count is less than k? 
4 
5 
6 
7 
[93, 77, 55, 54, 44, 31, 26, 20, 17] 

ответ

0

Я нашел эту реализацию питона

http://interactivepython.org/runestone/static/pythonds/SortSearch/TheSelectionSort.html

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

Надеюсь, это поможет.

+0

Итак, используя интерактивный пример python, могу ли я не просто поставить цикл while перед первым циклом for и иметь счет в цикле for? то скажите, пока этот счетчик меньше значения z делает алгоритм? – snuffles101

+0

Конечно, вам стоит попробовать. Я считаю, что это сработает. –

0
import itertools 

def limitedInsertionSort(L, z): 
    comps = 0 
    if z > len(L): 
     raise ValueError("List too small") 
    for i,j in itertools.product(range(z), range(len(L))): 
     if L[i] < L[j]: 
      L[i], L[j] = L[j], L[i] 
     comps += 1 
    return comps 

Но, конечно же, так как вы заботитесь только о Инкрементировании аккомпанементов:

def countComps(L, z): 
    if z > len(L): 
     raise ValueError("List too small") 
    comps = 0 
    for i,j in itertools.product(range(z), range(len(L))): 
     comps += 1 
    return comps 

Но тогда, так как вы знаете, сколько раз вы увеличиваете comps, вы можете просто сделать умножение:

def countComps(L, z): 
    if z > len(L): 
     raise ValueError("List too small") 
    comps = z*len(L) 
    return comps 

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

  • Нет связанных вопросов^_^