OZ语言中的Quicksort算法

时间:2016-09-09 07:54:45

标签: quicksort oz

以下OZ程序使用内置分区功能来执行QuickSort算法。需要使用原始分区方案而不是内置分区函数来修改程序。 我搜索并找到了2个原始方案:Lomuto分区方案和Hoare分区方案,但我无法修改程序(我是OZ语言的新手)!维基百科在以下链接中解释了所需的两个分区方案:https://en.wikipedia.org/wiki/Quicksort

我想修改的OZ程序:

声明 有趣{QuickSort Xs} 案件Xs为零然后为零 [] Pivot | Xr然后 有趣{IsSmaller X} X.

1 个答案:

答案 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