c_a13_s Ответов: 0

Как мне это сделать в haskell


Вот реализация Haskell сортировки слиянием, которая похожа на
тот, который мы видели на неделе 02 учебных вопросов. 'сортировка слиянием'
обрабатывает основную рекурсию, описанную выше, "split" делает следующее:
расщепление, и "слияние" делает слияние.

Попробуйте функции компонентов на нескольких примерах, чтобы понять, как это делается
они работают. Обратите внимание, что "слияние" работает только так, как ожидалось, когда входные данные
уже отсортированы. -}

сортировка слиянием :: ОГА а =&ГТ; [а] -&ГТ; [а]
сортировка слиянием [] = []
mergeSort [x] = [x]
сортировка слиянием хз = слиянием (сортировка слиянием xs1) (сортировка слиянием xs2)
где (xs1, xs2) = разделить xs [] []

split :: [a] -> [a] -> [a] -> ([a],[a])
split [] ys zs = (ys, zs)
сплит [х] Ю. С. ЗС = (х:йс, ЗС)
сплит (г:з:хз) Ю. С. ЗС = раскол хз (г:ю) (з:ЗС)

слияние :: Ord a => [a] -> [a] -> [a]
слияние [] ys = ys
объединить xs [] = xs
слияния (х:хз) (г:Ю. С.) = Если X &ЛТ; Y, то х : слить хз (г:Ю. С.) Еще г : слияние (х:хз) Ю. С.

{- 'mergeSort', как написано выше, опирается на реализацию 'Ord'
для типа "а", чтобы сделать сравнения. Сортировка слиянием переписать, так что
он принимает в качестве входных данных "компаратор а", вместо того чтобы полагаться на
по умолчанию один из экземпляров 'Ord'. Вам также нужно будет написать
новое определение "слияния", называемое "mergeWith". -}

mergeSortWith :: компаратор a -> [a] -> [a]
mergeSortWith = неопределено

mergeWith :: компаратор a -> [a] -> [a] -> [a]
mergeWith = неопределенный


{- Убедитесь, что вы случайно не вызываете "mergeSort" в рекурсивном режиме
звонки!

Должно быть так, что "mergeSortWith compare" всегда дает
тот же ответ, что и "mergeSort". Например:

&ГТ; mergeSortWith сравнить [5,2,3,4,1]
[1,2,3,4,5]
> mergeSortWith compare ["c", "aaa", "bb"]
["aaa","bb","c"]

Но когда мы используем вышеприведенные функции, мы получаем разные порядки:

> mergeSortWith (инвертировать сравнение) [5,2,3,4,1]
[5,4,3,2,1]
&ГТ; mergeSortWith (сравнение по длине) ["ц", "ААА", "ВВ"]
["c","bb","aaa"]
-}

Что я уже пробовал:

я еще не смог ее решить.

Richard MacCutchan

- пока не удалось решить эту проблему."
Продолжай пытаться.

Richard Deeming

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

0 Ответов