以下OZ程序使用内置分区功能来执行QuickSort算法。需要使用原始分区方案而不是内置分区函数来修改程序。 我搜索并找到了2个原始方案:Lomuto分区方案和Hoare分区方案,但我无法修改程序(我是OZ语言的新手)!维基百科在以下链接中解释了所需的两个分区方案:https://en.wikipedia.org/wiki/Quicksort
我想修改的OZ程序:
声明 有趣{QuickSort Xs} 案件Xs为零然后为零 [] Pivot | Xr然后 有趣{IsSmaller X} X.
答案 0 :(得分:1)
proc {Partition Xs Pivot Left Right}
case Xs
of X|Xr then
if X < Pivot
then Ln in
Left = X | Ln
{Partition Xr Pivot Ln Right}
else Rn in
Right = X | Rn
{Partition Xr Pivot Left Rn}
end
[] nil then Left=nil Right=nil
end
end
fun lazy {LQuickSort Xs}
case Xs of X|Xr then Left Right SortedLeft SortedRight in
{Partition Xr X Left Right}
{LAppend {LQuickSort Left} X|{LQuickSort Right}}
[] nil then nil
end
end