sort/doc/pseudo/bitonicsort.txt

82 lines
1.9 KiB
Plaintext

entrada: array: arreglo de n datos; n: tamaño del arreglo
salida: arreglo ordenado
funcion ordenamientobitonico(array, n)
orden(array, n, 1)
return array
fin funcion
funcion potencia_de_dos(n)
si n = 0 entonces
retornar 0
fin si
mientras n distinto 1 hacer
si n es modulo de 2 entonces
retornar 0
fin si
fin mientras
retornar 1
fin funcion
funcion mejor_potencia_de_2_menos_a_n(n)
k = 1
mientras k > 0 y k < n hacer
busca el numero potencia de dos mas proximo hacia abajo en n
fin mientras
retorna k
fin funcion
funcion comparar(i, j, dir, array)
temp = array[i]
array[i] = array[j]
array[j] = temp
fin funcion
funcion unionbitonica(low, n, dir, array)
si n > 1 entonces
k = n / 2
para i = low hasta i < low + k con paso i = i + 1
comparar(i + k, di, array)
fin para
unionbitonica(low, k, dir, array)
unionbitonica(low + k, k, dir, array)
fin si
fin funcion
funcion unionbitonico2(low, n, dir, array)
si n > 1 entonces
k = mejor_potencia_de_2_menos_a_n
para i = low hasta i < low + n - k con paso i = i + 1 hacer
comparar(i, i + k, dir, array)
fin para
ordenamientobitonico2(low, k, dir, array)
ordenamientobitonico2(low + k, n - k, dir, array)
fin funcion
funcion recorrerbitonico(low, n, dir, array)
si n > 1 entonces
k = n / 2
recorrerbitonico(low, k, 1, array)
recorrerbitonico(low + k, k, 0, array)
unionbitonica(low, n, dir, array)
fin si
fin funcion
funcion recorrerbitonico2(low, n, dir, array)
si n > 1 entonces
k = n / 2
recorrerbitonico2(low, k, !di, array)
recorrerbitonico2(low + k, n - k, dir, array)
unionbitonico2(low, n, dir, array)
fin si
fin funcion
funcion orden(array, n, dir)
si potencia_de_dos(n) entonces
recorrerbitonico(0, n, dir, array)
fin si
sino
recorrerbitonico2(0, n, dir, array)
fin sino
fin funcion