is it possible to do quicksort of a list with only one passing?

前端 未结 3 522
梦谈多话
梦谈多话 2020-11-29 12:00

I am learning haskell and the function definition I see is:

quickSort (x : xs) = (quickSort less) ++ (x : equal) ++ (quickSort more)
                 where         


        
3条回答
  •  [愿得一人]
    2020-11-29 12:24

    You mean something like this?

    quicksort [] = []
    quicksort (x:xs) = quicksort less ++ (x : equal) ++ quicksort more
      where (less, equal, more) = partition3 x xs
    
    partition3 _ [] = ([], [], [])
    partition3 x (y:ys) =
      case compare y x of
        LT -> (y:less, equal, more)
        EQ -> (less, y:equal, more)
        GT -> (less, equal, y:more)
      where (less, equal, more) = partition3 x ys
    

    Note that this isn't really quicksort, as the real quicksort is in-place.

提交回复
热议问题