Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 26, 2015 22:33:46

alex28746
Зарегистрирован: 2015-01-18
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема в сортировке слиянием

Еще раз здравствуйте. Столкнулся с такой проблемой когда писал алгоритм слияния. Задумка такая, при указывании в параметрах функции(way) 0 алгоритм должен сортировать от минимального к максимальному значению, а при указании 1 наоборот.

class Slist:
    def __init__(self,lista):        
        self.len = len(lista)
        
    def mergeSort(self, L,way=1):
        """0 - ot min do max
        1 - ot max do min"""
        if len(L) > 1:
            i = len(L)/2
            left = self.mergeSort(L[:i])
            right = self.mergeSort(L[i:])
            print way
            return self.__klej(left,right,way)
        else:
            return L
    def __klej(self,left,right,way):
        result = []
        ileft = 0
        iright = 0
        while True:
            if ileft == len(left):
                result.extend(right[iright:])
                return result
            if iright == len(right):
                result.extend(left[ileft:])
                return result
            if way == 0:
                if left[ileft] >= right[iright]:
                    result.append(right[iright])
                    iright += 1
                else:
                    result.append(left[ileft])
                    ileft += 1
            if way == 1:
                if left[ileft] <= right[iright]:
                    result.append(right[iright])
                    iright += 1
                else:
                    result.append(left[ileft])
                    ileft += 1
                
изначально поставил чтобы сортировало от максимального к минимальному.
но при изменении на 0
print a.mergeSort(lista,0)
алгоритм не работает,а точнее он не склеивает списки. Может кто знает в чем проблема?
прошу прощения за быдло код

Отредактировано alex28746 (Апрель 26, 2015 22:34:22)

Офлайн

#2 Апрель 26, 2015 23:13:09

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

проблема в сортировке слиянием

            left = self.mergeSort(L[:i], way)
            right = self.mergeSort(L[i:], way)



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

Офлайн

#3 Апрель 26, 2015 23:45:45

alex28746
Зарегистрирован: 2015-01-18
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема в сортировке слиянием

Благодарю!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version