# sort/2

### Module: builtins

`sort/2`

— sorts a list of terms

`keysort/2`

— sorts a list of Key-Data pairs

## FORMS

```
sort(List, SortedList)
keysort(List, SortedList)
```

## DESCRIPTION

`sort/2`

sorts the `List`

according to the standard order. Identical elements, as defined by `==/2`

, are merged, so that each element appears only once in `SortedList`

.

`keysort/2`

expects `List`

to be a list of terms of the form: `Key-Data`

. Each pair is sorted by the `Key`

alone. Pairs with duplicate `Keys`

will not be removed from `SortedList`

.

A merge sort is used internally by these predicates at a cost of at most N(log N) where N is the number of elements in `List`

.

## EXAMPLES

The following examples illustrate the use of `sort/2`

and `keysort/2`

:

```
?- sort([orange,apple,orange,tangelo,grape],X).
X = [apple,grape,orange,tangelo]
yes.
?- keysort([warren-davidh, bowen-kenneth,
warren-davids, bowen-david,
burger-warren], X).
X = [bowen-kenneth,bowen-david,burger-warren,
warren-davidh,warren-davids]
yes.
```

The following example shows the way structures with the same principal functor are sorted:

```
?- sort([and(a,b,c), and(a,b,a,b), and(a,a), and(b)],Sorted).
Sorted = [and(a,a),and(a,b,a,b),and(a,b,c),and(b)]
yes.
```