Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 8, 2016 19:52:48

be_smmr
Зарегистрирован: 2016-06-08
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Алгоритм сортировки Шелла.

Реализовать алгоритм сортировки Шелла6, идея которого заключается в следующем: выбирая некоторое число 𝑑 𝑛 (𝑛 — длина списка), сортируем элемен- ты, находящиеся на расстоянии 𝑑 друг от друга (всего будет 𝑑 таких подсписков), методом простых вставок. Затем уменьшаем 𝑑 и повторяем данный шаг. Процесс завершается при 𝑑 = 1 обычной сортировкой вставками. В прикрепленном файле есть пример.
Мой код на данный момент выглядит так и у меня проблема с циклами по вставке обратно в список, так как размерность последней строки на 1 меньше, чем первой - выдается ошибка.

import random
n = int(input("N: "))
d = int(input("D: "))
L = [random.randint(-20,20) for i in range(n)]
M = []
k = 0
L1 = []
#Razdeleniye na D(5)
while k <= len(L):
    if len(L1) <= d:
        if k == 0:
            L1.append(L[k::d])
            k = k + 1
        if n - k >= d:
            L1.append(L[k::d])
            k = k + 1
        else:
            break
    else:
        break
print("_____")
print(L)
print(L1[:-1])
L2 = []
#Sortirovka
for i in range(len(L1)):
    L1[i].sort()
#Dobavleniye obratno v spisok
L_2 = []
for i in range(len(L1[:-1])):
    for j in range(len(L1[i][:-1])):
        #Tut sama problema
        L_2.append(L1[j][i])
        if len(L[j][i]) < len(L[j][0]):
            L_2.append((L1[j][i][:-1]))
            break
print("-----")
print(L1[:-1])
print(L_2)

Прикреплённый файлы:
attachment Снимок экрана 2016-06-08 в 19.46.13.png (157,7 KБ)

Офлайн

#2 Июнь 20, 2016 22:26:58

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Алгоритм сортировки Шелла.

разбирайте готовое решение



————————————————
-*- Simple is better than complex -*-

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version