Anuncios Google

[SOLUCIONADO POR DEVIANTE] Duda pasajera en LuaDev: algoritmos de ordenación por inserción :D

Buenas, estaba buscando un algoritmo para hacer una especie de "menu principal" en iThunder OS y me preguntaba si este algoritmo sería la solución, y en caso de que sea, como lo podría "implementar" en Lua (ya que vienen ejemplos en otros lenguajes C, C++, Java... pero no Lua).

Lo único que me gustaría saber es eso: si funcionaría dicho algoritmo aplicado a una tabla de elementos (iconos de las apps en este caso).

Gracias :D

EDITO: he estado estos últimos minutos trasteando intentando convertir el pseudocódigo de ejemplo:

algoritmo insertSort( A : lista de elementos ordenables )
    para i=1 hasta longitud(A) hacer
         index=A[i]
         j=i-1
         mientras j>=0 y A[j]>index hacer
              A[j+1] = A[j]
              j = j - 1
         fin mientras
         A[j+1] = index
    fin para
fin algoritmo

En código Lua. Aqui os dejo lo que he intentado, a ver si está bien:

Primero cargo tabla y elementos...

-- Primero se crea una tabla válida con 4 elementos por ejemplo:
 
elementos = {
   app1 = LOQUESEA,
   app2 = LOQUESEA,
   app3 = LOQUESEA,
   app4 = LOQUESEA,
}

Y aquí viene el algoritmo "traducido"...

-- Intento de traducción del algoritmo:
 
function insertSort(elementos)
    for i=1,#elementos do
         index=elementos[i]
         j=i-1
         while j >= 0 and elementos[j] > index do
              elementos[j+1] = elementos[j]
              j = j - 1
         end
         elementos[j+1] = index
    end
end

Creo que está bien... a ver que os parece...

SOLUCIONADO POR DEVIANTE


 

 


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Gracias a ambos :D

Gracias a ambos (Dev y Nekerafa) :D

Imagen de NEKERAFA

Mmm...

Ya dije desde un principio que añadierais el manual de lua a marcadores XD

Lua incluye una función de ordenamiento de tablas, table.sort(tabla [, comparador]). Tienes más información en el propio manual, y para la próxima mira si está en el manual: http://www.lua.org/manual/5.1/es/

 

EDITO: Ups, Deviante se me adelantó XD


NekeOS, el nuevo shell para PSP

PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.

Sony Xperia Z1 Compact con Android 5.1.1

Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).

Imagen de DeViaNTe

Pero mira que.....

Pero mira que os gusta complicaros la vida por no perder un poco de tiempo en leer los manuales... preferis buscar algoritmos que hagan cosas raras, antes de saber realmente qué quereis... buscáis respuestas sin conocer las preguntas adecuadas...

Así se busca, y ésta es la respuesta:

function ordena( tabla , indice ) do return table.sort(ordena,function(a,b) return a[indice] < b[indice]; end)end 

Suponiendo que tenemos una tabla:
mitabla = {
   { numero = 1, imagen = .... },
   { numero = 8, imagen = .... }, 
   { numero = 5, imagen = .... },

Despues de un mitabla = ordena(mitabla,"numero"); tenemos: 

mitabla = {
   { numero = 1, imagen = .... },
   { numero = 5, imagen = .... },
   { numero = 8, imagen = .... },  
}   


Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es

Imagen de User170294

Umm. El algoritmo que quieres

Umm. El algoritmo que quieres usar sirve para ordenar una lista de números. No entiendo que es lo que quieres hacer.

Mmmm...

Con que una lista de números... entiendo, se podría hacer algo así:

-- Se crea una tabla con los elementos, pero esta vez algo más compleja ;D
 
elementos = {
   app[1] = {
      image = image.load(RUTA),
      x = 20,
      y = 20,
      orden = 1,
   },
 
   app[2] = {
      image = image.load(RUTA),
      x = 40,
      y = 40,
      orden = 2,
   },
 
   app[3] = {
      image = image.load(RUTA),
      x = 60,
      y = 60,
      orden = 3,
   },
}

-- Quería evitar usar el for, pero que se le va a hacer...
 
function mostrarApps(tablaApps)
   for n = 1,#elementos do
      if app[n].orden == n then
         app[n].image:blit(app[n].x,app[n].y);
      end
   end
end

while true do
   mostrarApps();
   screen.flip();
end

Y entonces con el algoritmo hacer una especie de variable "seleccionado = false" y si al hacer "controls.press("triangle")" entonces la app correspondiente es "seleccionado = true" para que al "controls.press("up")" cambie de "orden" por medio del algoritmo. ¿Lo entiendes más o menos? 


 

 

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.