FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Ordenar array ????
Hola amigos, tengo un array de 4 valores relleno de datos no ordenados, por ejemplo [2,8,4,1]
necesito volcarlos en otro array de registros de una forma ordenada de menor a mayor, quedando así [1,2,4,8]. Tengo el problema de que si el array original es por ejemplo [2,0,4,1] el resultado de ese ordenamiento de array no debe ser [0,1,2,4], sino [1,2,4,0], es decir, me debe ordenar los valores de forma que los primeros sean los valores ordenados y los últimos digitos aquellos que sean cero. He consultado en el foro y no veo una consulta parecida, y me está dando un verdadero quebradero por que no veo la lógica para poder generar el ordenamiento. Gracias de antemano. |
#2
|
||||
|
||||
Metodo burbuja (busca el algoritmo, seguro lo consigues incluso escrito en pascal). Se trata de recorrer el arreglo e ir organizando sus valores. Una modificacion seria condicionar el if de la decisicion para tratar de forma especial los ceros
__________________
Héctor Geraldino Software Engineer |
#3
|
|||
|
|||
Ok Hector gracias por el consejo
|
#4
|
||||
|
||||
Cita:
// Saludos |
#5
|
||||
|
||||
Codigo (array de 10 numeros)
Hice un programa para ordenar de la manera que tu pediste un array de 10 elementos, espero te sirva.
procedure TForm1.BtnOrdenarClick(Sender: TObject); var x, y, tot, aux: integer;begin tot := 10; //tot es la variable que me dice cuantos de losend; Última edición por Albano fecha: 20-01-2005 a las 18:33:51. |
#6
|
|||
|
|||
Muchas gracias Albano.
Salu2 |
#7
|
|||
|
|||
Tambien me sirvió tu ejemplo
Aún despues de que ya tiene rato que publicaste tu consejo, me sirvió para ordenar fechas, te dejo lo que arreglé:
La variable tot, la declaré publica y el objetivo es explorar una serie de nombres de archivo los cuales están guardados con un mombre de fecha, la intención es extraer el nombre del archivo, acomodarlo por fecha en un combo list box y para eso necesité de tu método burbuja., gracias. procedure TForm1.Button3Click(Sender: TObject); var SearchRec: TSearchRec; archivo : string; x, y :integer; aux : TDateTime; vec: array[0..500] of TdateTime; begin tot:=0; if psvBrowseFolderDialog1.Execute then begin Memo2.Clear; SB1.SimpleText:=psvBrowseFolderDialog1.FolderName; archivo:=''; CLB1.Clear; if FindFirst(psvBrowseFolderDialog1.FolderName+'\*.01', faAnyFile and not (faVolumeID or faDirectory), SearchRec) = 0 then begin repeat archivo:=SearchRec.Name; tot:=tot+1; vec[tot]:=StrToDate(archivo[3]+archivo[4]+'/'+archivo[5]+archivo[6]+'/'+archivo[7]+archivo[8]) //CLB1.Items.Add(archivo[3]+archivo[4]+'/'+archivo[5]+archivo[6]+'/'+archivo[7]+archivo[8]); until FindNext(SearchRec) <> 0; FindClose(SearchRec); end; ///MÉTODO BURBUJA PARA ARREGLAR FECHAS /////////// tot2 := tot; //tot es la variable que me dice cuantos de los for x := 1 to tot - 1 do //numeros del arreglo no son 0 begin if vec[x] = 0 then begin for y := x to tot - 1 do //se recorren todos los valores una unidadvec[y] := vec[y+1]; //hacia atras vec[tot] := 0; //a la ultima posicion se le da valor de cero dec(tot); end; end; for x := 1 to tot do //Metodo de burbuja begin for y := 1 to tot - 1 do begin if vec[y] > vec[y+1] then begin aux := vec[y]; vec[y] := vec[y+1]; vec[y+1] := aux; end; end; end; //////////////////////////////////////////////// //FOR PARA INSETAR EN CLB1/////////////// for x:=1 to tot2 do begin CLB1.Items.Add(DateToStr(vec[x])); end; /////////////// end; end; |
|
|
|