# [R] Sorting based a custom sorting function

Martin Møller Skarbiniks Pedersen tr@xp|@yer @end|ng |rom gm@||@com
Thu Dec 14 12:31:57 CET 2023

```> This sounds suspiciously like homework (which is off-topic... see the Posting Guide)

It is not homework.
Currently I am trying to solve this: https://adventofcode.com/2023/day/7

But it is something that has puzzled me for a long time.
In many programming languages, you can give a "less" function to the
sorting function.

The "less" function normally takes two arguments and tells which is
greater. The sorting function then uses that.
Eg. in perl:
@products = sort { \$a->{price} <=> \$b->{price} || \$b->{discount} <=>
\$a->{discount} } @products;

>  and you haven't indicated how you plan to encode your poker hands
> If this is not homework, then please show your work so far instead of showing a completely different example.

I believe a MRE is better than a lot of code with many details that
are not related to the precise problem.
See https://stackoverflow.com/help/minimal-reproducible-example

My encoding of poker hands doesn't matter for the general problem of
providing a custom sorting function to any of the many
sorting functions in R.

> Most core features of other languages are possible in R so if you really understand these other techniques and R then you should be able to do this already.

I understand R quite well and implemented my own quicksort but I was
wondering for a better solution.

Here is my current solution.

quicksort <- function(arr, compare_func) {
if (length(arr) <= 1) {
return(arr)
} else {
pivot <- arr[1]
less <- arr[-1][compare_func(arr[-1], pivot) <= 0]
greater <- arr[-1][compare_func(arr[-1], pivot) > 0]
return(c(quicksort(less, compare_func), pivot, quicksort(greater,
compare_func)))
}
}

Regards
Martin

Martin

```