![]() |
Mi codigo de ordenacion por insercion no funciona bien
Hola amigos, estoy intentando crearme un pequeño codigo el cual coja dos arrays con enteros y los vaya insertando ordenados en un tercer array de forma ya ordenada sin tener que usar ningun otro metodo de ordenacion en ninguno de los 3 arrays. El caso es que no doy con la tecla y hace cosas raras. Os pongo mi codigo a ver si pueden echarme una mano:
Código PHP:
|
Hola.
Revisa este modo: Código PHP:
![]() Saludos :) |
Ese método ya lo estuve viendo pero no puedo usarlo porque ahí tu metes todos los elementos dentro y luego los ordenas y yo quiero ir metiendo los de uno en uno y a la vez colocando ya ordenado.
|
Hola.
Entiendo... no deseas ordenar un arreglo por el método de inserción, sino ir insertando en órden los ítems a medida que se van agregando al arreglo. Entonces podes tratarlo así: Código PHP:
![]() Saludos :) |
Sí, eso ya lo hice y funciona pero la idea era hacerlo de otra forma como sigue. Imagina un arreglo con 1 millón de elementos a insertar en orden, con tu método tienes que leer todo cada vez hasta encontrar su posición y eso cuantos más elementos más tardará.
Mi idea es esta Si tengo ya los elementos: 1,2,5,6,7,10,15,20 Quiero insertar 9. La posición inicial será la última con lo que en primer lugar lo comparo con el 20. Como es menor divido el índice entre 2 para comparar con el del medio que en este caso sería el 6. Como 9 es mayor que 6 la idea es coger el rango entre la posición actual y la última y comparar con el del centro. En este caso sería con el valor 10 y como 9 es menor coger el rango entre el valor 6 y el 10 y divido entre 2 y esta vez comparará con el 7 y como es mayor cojo el rango de los valores del 7 al 10 y lo divido entre 2 y ya obtendría la posición correcta. Parece un lio pero pienso que cuando se trabaje con arrais muy grandes puede mejorar los tiempos con respecto a lo que indicas pero no doy con la tecla. He estado dándole muchas vueltas y ahora mismo la tengo así la función que obtiene la posicion pero no funciona a como quiero: Código PHP:
|
Hola.
Si buscas velocidad de ordenamiento sobre un arreglo, por sencillez, pensaría en el algorítmo QuickSort. Usando inserción, por mas que optimices la búsqueda del índice donde el elemento deberá ser insertado, no podrás evitar tener que hacer : N - posición desplazamientos. Imagina que en algún punto ya existen 1000000 elementos ordenados en el arreglo, vg: Código:
[1,3,3,4,5,6,6,7,7, ... ,979827,992799,993256] Y dado que desplazar posiciones de memoria es una taréa bastante lenta, no veo al método como el candidato mas veloz. Otras opciones que te podrían resultar interesantes:Por último, si no necesitas tener los datos físicamente ordenados, podría servirte: Tabla hash Saludos :) |
Lo siento pero no pude contestar antes porque no he estado con internet hasta ahora. Al final lo he conseguido asi:
Código PHP:
Tengo algunas dudas: 1-Esta parte: Código PHP:
2-Misma duda pero con esta parte: Código PHP:
Si todos los arrays no fueran cada uno por su lado, fueran todos en un array de arrays y todos con el mismo tamaño no habria problema pero quiero saber como hacerlo en este caso en que cada array va por su lado y pueden tener tamaños diferentes. |
Por otro lado con 2 arrays de 1000000 bastaria con unas 20 iteraciones maximo por numero en el peor de los casos ya que truncando los decimales como hago tengo esto:
Código:
1000000/2=500000; 500000/2=250000; 250000/2=125000; 125000/2=75000; 75000/2=37500; 37500/2=18750; 18750/2=9375; 9375/2=4687; 4687/2=2343; 2343/2=1171; 1171/2=585; 585/2=292; 292/2=146; 146/2=73; 73/2=36; 36/2=18; 18/2=9; 9/2=4; 4/2=2; 2/2=1; 1/2=0 |
Para este tipo de tareas es bueno este recurso:
https://rosettacode.org/wiki/Categor...ing_Algorithms (Cada ejemplo esta implementado en decenas de diferentes lenguajes, no solo mostrando como seria en el tuyo sino dejandote ver otras formas de hacerlo!) Y si estas buscando como hacer el sort mas eficiente, tienes que leer los diversos algoritmos a ver cual da la talla para el caso especifico: https://stackoverflow.com/questions/...ly-sorted-data |
La franja horaria es GMT +2. Ahora son las 20:43:54. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi