Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   JAVA (https://www.clubdelphi.com/foros/forumdisplay.php?f=16)
-   -   indice fuera de rango (https://www.clubdelphi.com/foros/showthread.php?t=64170)

chouki 20-03-2009 16:24:28

indice fuera de rango
 
hola muy buenas a tod@s
En principio quiero hacer un programa recursivo que me permite ordenar los datos (enteros) del vector usando inserción directa.
Proceso:para cada paso i los elementos v1,...vi-1 están ordenados y se inserta entre ellos vi de forma que después v1...vi estén ordenados habrá que comenzar con i=2.
la idea de la inserción directa es abrir un hueco en la sucesión v1..vi-1 para encajar vi en la posición adecuada.
Estás un pequeña aproximación que hicé pero claro hay un desbordamiento de los indices del array que se ven claramente al seguir el algoritmo:
Código:


  public static void insercion(int vector[],int ta)
  {
    if (ta-1>0)
    {
        insercion(vector,ta-1);
        insertar(vector,ta);
    }
  }
  public static void insertar(int v[],int tam)
  {
    int pivote,i;
    pivote=v[tam-1]; 
    i=tam-1;
    while (i>=0 && v[i]> pivote )
    {
          v[i+1]=v[i];
          i--;
    }
    v[i+1]=pivote;
  }

Pero en Principio si alguien se le ocurre una solución más eficiente que la mia estaré muy agradecido aquien me la puede facilitar yaque me ase falta urgentemente.
Muchisima gracias de antemano
En la espera de vuestra colaboración les saludo atentamente.

rgstuamigo 20-03-2009 20:49:38

Hola Chouki ,segun veo lo que quieres es ordenar los elementos de un vector,si es asi, te comento que existe muchos algoritmos ya para hacerlo:
por ejemplo Quick Sort,Bubble Sort,Selection Sort,Insertion Sort y otros.
El mejorcito es Quick Sort por ser mas rapido y recursivo.;)
En algunos link que te he puesto estan implementados para diferentes lenguajes de programacion inclusive java.Revisalo...
Saludos...:cool:

chouki 20-03-2009 21:10:50

gracias tio
por tu repuesta lo que pasa debo hacerlo por inserción directa de modo recursivo ojalà si tenia la posibilidad de elegir entre los algortimos pero es debo hacerlo de esta para efectuar una serie de comparaciones de eficiencia
pero en todos los modos muchisimas gracias por lo menos por tu iniciativa y tu colaboración
saludos

rgstuamigo 20-03-2009 21:38:33

Cita:

...debo hacerlo de esta para efectuar una serie de comparaciones de eficiencia
Me memo amigo que no vas a poder mejorar la eficiencia de estos algoritmos que te he puesto como referencias,en especial al Quick Sort, te aseguro que esta recontra probado y aparte de eso estamos hablando de algoritmos bien pensados.No me tomes a mal, pero no pensaras reinventar la rueda no?;):D......
Saludos...:)

chouki 20-03-2009 22:55:35

hola maestro
te doy toda la razón en lo que has comentado además seguro que sabrás de programación más que yo
lo que pasa piden un algoritmo de inserción recursivo
o sea no depende de mi:);):cool:
asi si te ocurre una solución recursiva pues te estaré agradecido si me la puedes facilitar :D
saludos

rgstuamigo 20-03-2009 23:09:35

Cita:

hola maestro
La Biblia dice que a nadie debes decir maestro sino solo a uno Jesús.;)
Cita:

seguro que sabrás de programación más que yo
Nada que ver amigo, yo solo soy un aprendiz al igual que muchos que merodiamos por aqui.
Bueno en cuanto a tu problema, ya te comente que precisamente el algoritmo Quick Sort es recursivo , claro que existen algunas variantes que lo han hecho iterativo pero eso depende de cada uno.
Chekea el link en la ultima parte de abajo esta el codigo en java.
Saludos...;):D

rgstuamigo 20-03-2009 23:16:06

Se me olvidaba
 
Si no te agrada ese codigo bueno es un ejemplo, busca en google por:
"QuickSort" o "Quick Sort" o "Quick Sort en java" y vas a encontrar miles
de codigo y referencias.;)

chouki 21-03-2009 09:41:35

muchisima gracias tio
todos los algoritmos que mencionaste están bien lo que pasa tiene por esfuerzo usando método de inserción directa recursivo,que no es por capricho:D:mad::confused: ni nada de eso sino restricciones del programa.
saludos

rgstuamigo 21-03-2009 14:03:35

Cita:

todos los algoritmos que mencionaste están bien lo que pasa tiene por esfuerzo usando método de inserción directa recursivo,que no es por capricho:D:mad::confused: ni nada de eso sino restricciones del programa.
Entonces te sirve el Insertion Sort recursivo;),como su nombre lo indica se utiliza
inserciones, desde luego originalmente es iterativo, pero se lo puede hacer recursivo asi como tu quieres revisalo o buscalo en google por "Insertion Sort recursivo".;)


chouki 21-03-2009 18:43:26

hola
ahora lo que voy hacer es implimentar la versión iterativa ya luego veremos
con la querida versión recursiva:p
lo que pasa este procedimiento kdo hay datos duplicados en el array
por eje:6,1,2,0,106,1
a la hora de ordenar poner los datos repetidos uno detrás del otro
resultado de salida:0,1,1,2,6,106
no sé si el hecho de que salgan los datos repetidos están bien hecho u está mal?
este es el procedimiento que hice:
Código:

public
staticvoid insertar(int v[],int tam)
{
  int aux,j;
  for(int i=1;i<tam;i++)

{

    aux=v[i];
    for( j=i-1;j>=0;j--)

  {

    if(aux>v[j])
  {
      v[j+1]=aux;

      break;

  }
  else// si no, sigue buscándola.

    v[j+1]=v[j];
  }
  if(j==-1)

    v[0]=aux;

}


}

gracias

chouki 21-03-2009 18:44:35

gracias por vuestra ayuda


La franja horaria es GMT +2. Ahora son las 20:25:35.

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