Есть какой-нибудь более простой способ реализовать сортировку выбора по месту в OCaml?

Я реализовалnon-in-place версия выбора сортировки в OCaml.

let sort compare_fun l = 
    let rec find_min l' min_l origin_l =
      match l' with
    | [] -> 
      if min_l = [] then (min_l, l')
      else 
        let min = List.hd min_l 
        in 
        (min_l, List.filter (fun x -> if x != min then true else false)  origin_l)
    | x::tl -> 
      if min_l = [] then
        find_min tl [x] origin_l
      else 
        let c = compare_fun (List.hd min_l) x
        in 
        if c = 1 then 
          find_min tl [x] origin_l
        else if c = 0 then
          find_min tl (min_l @ [x]) origin_l
        else 
          find_min tl min_l origin_l
    in 
    let rec insert_min l' new_l =
      match l' with
    | [] -> new_l
    | _ -> 
      let (min_l, rest) = find_min l' [] l'
      in 
      insert_min rest (new_l @ min_l)
    in 
    insert_min l [];;

Моя идея заключается в том, что в списке каждый раз, когда я нахожу список минимальных элементов (в случае дублированных значений) и добавляю этоmin list к списку результатов, затем верните Find_min в остальной части списка.

я используюList.filter отфильтроватьmin_list, поэтому результирующий список будет списком для следующего.find_min

Я считаю, что моя реализация довольно сложна и намного сложнее, чем Java-версия выбора вида.

Есть предложения по улучшению?

Ответы на вопрос(1)

Ваш ответ на вопрос