Cómo escribir un algoritmo de ordenamiento en SQL Server

Índice de Contenido
  1. Algoritmos de ordenamiento
  2. El ejemplo
  3. Ordenarlo

Algoritmos de ordenamiento

Un algoritmo de ordenamiento es una rutina que ordena un conjunto de datos, típicamente almacenados en un arreglo, un conjunto u otra estructura de datos. Existen muchos tipos de algoritmos de ordenamiento, algunos de los cuales son muy rápidos, sofisticados y complejos, y otros son bastante básicos. Es mejor escribir los algoritmos más complejos en lenguajes iterativos, como C++, donde es fácil definir estructuras de datos para almacenar los datos y las construcciones para ordenar están fácilmente disponibles. Los algoritmos más simples se pueden escribir en TSQL, aunque se requiere cierta iteración.

En este ejemplo, implementaré una variación del algoritmo de ordenamiento de Burbuja, que es uno de los algoritmos de ordenamiento más fáciles de implementar debido a su naturaleza de "fuerza bruta". Recorre los caracteres, verificando cada uno contra el siguiente hasta determinar que las cadenas (o números) están en orden. Debido a cómo está implementado, el algoritmo de Burbuja es uno de los algoritmos de ordenamiento que peor rendimiento tienen, y sólo se utiliza para ordenar conjuntos pequeños de datos. Mi ejemplo contendrá conjuntos pequeños, por lo que este algoritmo funcionará bien, aunque no lo ejecutaría en un campo en una tabla con millones de registros.

En términos de algoritmos, el algoritmo de Burbuja tiene una complejidad de O(n^2), lo que significa que el máximo número de operaciones para ordenar el conjunto es el número de elementos en el conjunto al cuadrado. Para mi ejemplo, este número será un poco peor debido a la forma en que tengo que hacer algunas de las intercambiaciones en TSQL. Si este algoritmo se implementara en C++, se podría escribir de tal manera que tenga un rendimiento de O(n^2).

El ejemplo

Antes de llegar a la función de ordenamiento, necesito escribir una función auxiliar para ayudarme con el ordenamiento. Esta función hará el trabajo de intercambiar dos caracteres basándose en posiciones específicas en la cadena de caracteres.

Si tengo la cadena llamada elephant y necesito intercambiar el segundo y cuarto caracter de la cadena, mi función de intercambio producirá epelhant. Puede que no tenga mucho sentido hacer esto ahora mismo, pero es vital para la forma en que funciona nuestro algoritmo de ordenamiento de Burbuja. (El ejemplo de este artículo se aplica a SQL Server 2000 y versiones posteriores.)

CREATE FUNCTION dbo.udf_Swap

(

Consejos para manejar los desacuerdos de manera productiva

    @fullstring VARCHAR(1000),

    @charlocation1 TINYINT,

    @charlocation2 TINYINT

)

RETURNS VARCHAR(1000)

AS

Cómo utilizar JConsole para monitorear y administrar aplicaciones Java

BEGIN

        DECLARE @returnval varchar(1000)

        DECLARE @begin VARCHAR(1000), @middle VARCHAR(1000), @end VARCHAR(1000)

        DECLARE @firstchar CHAR(1), @secondchar CHAR(1), @len INT

        SET @fullstring = LTRIM(RTRIM(@fullstring))

        SET @len = LEN(@fullstring)

Cómo buscar en el historial de comandos en la terminal zsh

    IF @charlocation1 > @len OR @charlocation2 > @len

        SET @returnval = @fullstring

        ELSE

        BEGIN

               SET @firstchar = SUBSTRING(@fullstring, @charlocation1, 1)

               SET @secondchar = SUBSTRING(@fullstring, @charlocation2, 1)

Configuración de DNS en Windows: Cómo asignar el sufijo DNS y la lista de búsqueda

               SET @begin = LEFT(@fullstring, (@charlocation1-1))

            SET @middle = SUBSTRING(@fullstring, @charlocation1+1, (@charlocation2-@charlocation1)-1)

               SET @end = SUBSTRING(@fullstring, @charlocation2+1, @len)

               SET @returnval = @begin + @secondchar + @middle + @firstchar + @end

        END

    RETURN(@returnval)

5 consejos para mantener saludables las baterías de ion-litio

END

Ahora que tengo mi función auxiliar, puedo escribir la función de ordenamiento. Esta función, udf_SortString, acepta una cadena de caracteres y los devuelve en orden ascendente. Si hay números, se devolverán primero, seguidos de los caracteres alfabéticos. Si la cadena tiene una o más palabras, las palabras se ordenarán individualmente.

Hay dos bucles en esta función que realizan el trabajo de ordenamiento. El trabajo del primer bucle es repetir hasta que se hayan intercambiado caracteres. Una vez que se han intercambiado un conjunto de caracteres, es hora de comenzar desde el principio y hacer otra pasada. Este bucle finalizará una vez que no se hayan intercambiado caracteres y la cadena esté en orden.

El segundo bucle examina cada caracter de la cadena y lo compara con el siguiente caracter de la cadena. Si los caracteres están en orden, pasa al siguiente caracter. Si los caracteres no están en orden, utiliza la función que creé anteriormente y los intercambia. Luego el bucle comienza de nuevo y los caracteres se examinan una y otra vez hasta que no se produzcan más intercambios. Una vez que se completa un ciclo y no hay intercambios, la cadena está en orden.

CREATE FUNCTION udf_SortString

(

    @string VARCHAR(1000)

10 técnicas favoritas para solucionar problemas de DNS

)

RETURNS VARCHAR(1000)

AS

BEGIN

    DECLARE @len TINYINT

    DECLARE @i TINYINT

Por qué el uso de hilos en Ruby y Python puede afectar el rendimiento de una aplicación

    DECLARE @currentchar CHAR(1)

    DECLARE @swapped BIT

    DECLARE @begin BIT

    DECLARE @nextchar CHAR(1)

    SET @begin = 1

    SET @len = LEN(@string)

5 reglas para trabajar con cadenas de texto en VBA

    SET @i = 1

    WHILE @begin = 1 OR @swapped = 1

    BEGIN

        SET @swapped = 0

        SET @i = 1

        SET @begin = 0

Las 20 mejores herramientas en línea para diseño web y tipografía

        WHILE @i <= @len

        BEGIN

            SET @currentchar = SUBSTRING(@string, @i, 1)

            SET @nextchar = SUBSTRING(@string, @i + 1, 1)

            IF @currentchar > @nextchar AND (@nextchar > '')

            BEGIN

Cómo utilizar los foros en línea para promocionar tu aplicación móvil

                SET @string = dbo.udf_swap(@string, @i, @i + 1)

                SET @swapped = 1

            END

            SET @i = @i + 1

        END

    END

    RETURN(@string)

END

Todo lo que necesito hacer es llamar a mi función para ordenar una cadena:

SELECT dbo.udf_SortString('asdofimasdfasdf23rasdf')

Ordenarlo

La mayoría de los usuarios de bases de datos no piensan en cuánto trabajo implica ordenar y buscar datos porque la base de datos proporciona la funcionalidad. Al comprender cómo funciona esto, tengo una mayor apreciación de la funcionalidad.

Aunque es posible que no apliques la información que aprendiste en este ejemplo para la mayoría de los usuarios, quería mostrar cómo puedes escribir tus propias funciones de ordenamiento de cadenas en TSQL si surge la necesidad. Además, quería brindar una descripción general de los algoritmos de ordenamiento si no los conocías.

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Desarrollo, allí encontraras muchos artículos similares a Cómo escribir un algoritmo de ordenamiento en SQL Server , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.