A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://agda.github.io/agda-stdlib/master/Data.List.Sort.MergeSort.Base.html below:

Data.List.Sort.MergeSort.Base

Data.List.Sort.MergeSort.Base
------------------------------------------------------------------------
-- The Agda standard library
--
-- An implementation of merge sort
------------------------------------------------------------------------

-- Unless you are need a particular property of MergeSort, you should
-- import and use the sorting algorithm from `Data.List.Sort` instead
-- of this file.

{-# OPTIONS --cubical-compatible --safe #-}

open import Relation.Binary.Bundles using (DecTotalOrder)

module Data.List.Sort.MergeSort.Base
  {a ℓ₁ ℓ₂} (O : DecTotalOrder a ℓ₁ ℓ₂) where

open import Data.List.Base
  using (List; []; _∷_; merge; length; map; [_])

open import Data.Nat.Base using (_<_; _>_; z<s; s<s)
open import Data.Nat.Induction
open import Data.Nat.Properties using (m<n⇒m<1+n)

open DecTotalOrder O renaming (Carrier to A)

------------------------------------------------------------------------
-- Definition

mergePairs : List (List A)  List (List A)
mergePairs (xs  ys  yss) = merge _≤?_ xs ys  mergePairs yss
mergePairs xss             = xss

private
  length-mergePairs :  xs ys yss  let zss = xs  ys  yss in
                      length (mergePairs zss) < length zss
  length-mergePairs _ _ []              = s<s z<s
  length-mergePairs _ _ (xs  [])       = s<s (s<s z<s)
  length-mergePairs _ _ (xs  ys  yss) = s<s (m<n⇒m<1+n (length-mergePairs xs ys yss))

mergeAll : (xss : List (List A))  Acc _<_ (length xss)  List A
mergeAll []        _               = []
mergeAll (xs  []) _               = xs
mergeAll xss@(xs  ys  yss) (acc rec) = mergeAll
  (mergePairs xss) (rec (length-mergePairs xs ys yss))

sort : List A  List A
sort xs = mergeAll (map [_] xs) (<-wellFounded-fast _)

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4