Cómo escribir un algoritmo de ordenamiento en SQL Server
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 JavaBEGIN
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 zshIF @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úsquedaSET @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-litioEND
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ónDECLARE @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 VBASET @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íaWHILE @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óvilSET @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