Translate

martes, 29 de septiembre de 2026

Quicksort en Q#


Un algoritmo que me gusta mucho es el quicksort, porque es un algoritmo por demás claro. Ya he escrito lo fácil que es implementarlo en Erlang, Rust, haskell y lisp


Ahora le toca a Q#, el lenguaje de programación lógica/relacional. Básicamente, el algoritmo toma un pivote y agrupa los menores que el pivote al principio y los mayores al final y aplica quicksort a estos dos grupos. Y si la lista es vacía o tiene un elemento, ya está ordenada. 


Vamos al código: 


namespace QuantumQuickSort {


    function QuickSort(xs : Int[]) : Int[] {

        if Length(xs) <= 1 {

            return xs;

        }


        let pivot = xs[0];


        let smaller = Filter(x -> x <= pivot, xs[1...]);

        let greater = Filter(x -> x > pivot, xs[1...]);


        return QuickSort(smaller)

               + [pivot]

               + QuickSort(greater);

    }


    function Filter(predicate : (Int -> Bool), xs : Int[]) : Int[] {

        mutable result = [];


        for x in xs {

            if predicate(x) {

                set result += [x];

            }

        }


        return result;

    }

}


No hay comentarios.:

Publicar un comentario