Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   metodos de ordenacion de matrices (https://www.clubdelphi.com/foros/showthread.php?t=35733)

rls 19-09-2006 18:10:22

metodos de ordenacion de matrices
 
Hola amigos del foro.

Por favor alguien me podria pasar algun metodo de ordenacion de matrices(ordenacion en forma ascendente o descendente)
La matris que quiero ordenar es bidimensional y debo ordenarla una ves que se hayan almacenado todos los datos en cada posicion de la matris donde todas las posiciones estan con datos y no existe ninguna vacia

Agradesco de antemano su ayuda

Ñuño Martínez 19-09-2006 18:16:48

Pues tienes desde el básico "burbuja" hasta los sofisticados "Shell" o "Quick". Depende de lo que necesites:

¿Cuál es la dimensión de la matriz? (me refiero a lineal, bidimensional, tridimensional...)
¿Es posible que los datos estén casi ordenados a menudo o están desordenados casi siempre?
¿Se ordena cada vez que cambia un elemento o cuando ya se han introducido todos?
¿Es muy grande o tiene pocos elementos?
¿Hay huecos o todas las posiciones tienen datos a ordenar?
¿La memoria es lineal o está organizado como un árbol?

Crandel 19-09-2006 23:00:17

Para conocer mas los metodos que nombra Ñuño, te recomiendo leer cualquier libro básico de programación (no de delphi, etc) y si quieres los códigos para Delphi de cada uno de ellos, un libro clasico de pascal.

Robert01 22-09-2006 03:50:03

Hay varios algoritmos para ordenar matrices:
Burbuja, inserción, mezcla, ordenación rápida (qsort), etc
Este es el procedimiento qsort para ordenar un arreglo bidimensional (un vector de n elementos)
Para una matríz vas a tener que hacer algunas modificaciones según que columna quieras usar
para ordenar o si querés ordenar por filas.
Para algo más detallado te convendría ver el sitio numerical recipes o alguno parecido


Código Delphi [-]
procedure qsort(var a: arr;prim,ult,sen1:integer);
procedure quicksort(var a: arr; ilo, ihi: integer);
var
lo, hi, mid, t: integer;
begin
lo := ilo;
hi := ihi;
mid := a[(lo + hi) div 2];
repeat
while a[lo] < mid do
inc(lo);
while a[hi] > mid do
dec(hi);
if lo <= hi then begin
t := a[lo];
a[lo] := a[hi];
a[hi] := t;
inc(lo);
dec(hi);
end;
until lo > hi;
if (hi > ilo) then
quicksort(a, ilo, hi);
if (lo < ihi) then
quicksort(a, lo, ihi);
end;
begin
quicksort(a, prim, ult);
end;





saludos


La franja horaria es GMT +2. Ahora son las 22:37:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi