gracias,, muchas gracias de verdad a mi profesor de la universidad no le entiendo nada nada.pero a usted, le entiendo muy bien, explica de una manera sencilla, y clara. gracias por esta magnifica oportunidad, de esta manera puedo sacar mi carrera adelante, ya que me estaba desmotivando por no entender la programacion, Dios lo bendiga. saludos desde Bogotá colombia....
public class Ordenador{ public void ordenarQ(int[] array){ array = quicksort1(array); } public int[] quicksort1(int numeros[]){ return quicksort2(numeros,0,numeros.length-1); } public int[] quicksort2(int numeros[],int izq, int der){ if(izq>=der) return numeros; int i=izq, d=der; if(izq!=der){ int pivote; int aux; pivote = izq; while(izq!=der){ while(numeros[der]>=numeros[pivote] && izq
Me encantó tu explicación. La verdad es que hace muchos años no le entendí al Quicksort y ya le entendí. No tengo problema con la recursividad, pero en particular este algoritmo no lo entendía.
La explicación de la lógica cumple mas o menos con el ordenamiento quickSort (aunque en si el ordenamiento se hace de una manera un poco diferente). Lo que si es que el código no es para nada Quicksort tengo 3 observaciones respecto a eso si gustan pueden hacer las pruebas 1.- el while que se supone va a ir incrementando el izq (izq++) NUNCA SE EJECUTA 2.- quicksort2(numeros, i, izq - 1) Nunca realiza modificaciones al array siempre cae en la condicional que esta al principio para retun numeros; NOTA: si eliminas esas dos partes del codigo, va a seguir realizando de forma correcta el ordenamiento 3.- ese algoritmo lo que hace para el ordenamiento es ir posicionando del lado izquierdo los numero mas pequeños hasta terminar de recorrer todos sus elementos, un poco parecido al insert sort
me han servido de mucho los tutos y espero que mas mujeres como yo se animena a aprender programacion ya que esto tambien lo odemos hacer nosotras gracias jorge por compartir tus conocimientos un saludo desde colombia para ti y un besito de mi parte
Hola muchas gracias por el aporte. Creo que se puede mejorar bastante el codigo, y hay cosas que te confunden, como por ejemplo le estás modificando el valor de los parametros "izq" y "der" en lugar de modificar los valores "i" y "d" que son los que deberías aumentar y disminuir de valor.
Que tal amigo! excelente vídeo, le eh entendido muy bien! muchas gracias... Podrías hacer un vídeo en la cual expliques la forma de hacer el camino mas corto en grafos? para mi es un tema algo difícil y hasta ahora no eh podido hacerlo! te agradecería mucho si lo haces!
Buen vídeo, gracias por los anteriores también, pero... enserio tabula... o si no te gusta tabular siempre puedes hacer ctrl + shift + f. Seguir tu código fue una aventura en esta ocasión. igualmente gracias por tu tiempo
hola, muchas gracias por todo el tutorial, evidentemente como vos decis es muy dificil entenderlo a la primera, la duda que me queda es por que retorna numeros 2 veces seguidas?
Nada es "muy excelente", la excelencia es lo maximo que se puede alcanzar. En teoría, no existe nada mejor que esto, por lo tanto, decir "muy excelente" es redundante.
El video tiene sus años pero desde mi ignorancia no me explico el porque el nombre tan largos de las variables quick1; quick2 o lo que sea pones lo siguiente quicksort_punto_net_punto_ar_punto_mx_punto_us_punto_irak_punto_com (JOptionPane.showInputDialog("Sarcasmo no te ofendas"); siendo de que declarando quick1, quick2 y asi sucesivamente estaria mejor y mas entendible, Saludos!!
una pregunta, el método Arrays.sort que es el que usa java es el mismo que quickSort? o algun otro como shell, merge, etc? o este no tiene como tal un parecido con alguno de estos?
excelente explicacion, ni mi maestro de programacion me explicaria asi, muchas gracias por compartir el conocimiento. podrias hacer uno de shell porfavor
Parece estar el código al contrario que la explicación. Lo que cuadraría con la explicación sería el while de la izq por encima con . Y parece que falta la sustitución de la posición del pivote.
No entiendo el sentido de poner dos if que se contradicen, siendo que podrias poner solo uno y por descarte seria el otro, es decir un if-else. Ademas pones innecesariamente Else: return numeros, podrias haberlo puesto dentro del if(der==izq). Por otro lado, la mala identacion y que no pongas corchetes en algunos ciclos, hace que no se entienda mucho el orden...
Es en el contexto. Decir muy excelente esta mal dicho, el muy sobra, intenta googlear eso. También puedes ver esta animación, lo explica mucho mejor que yo.
entiendo se uso int para entender mejor, pero yo voy a usar números doubles,, números de hasta 10.000 , en el arreglo, solo para que valga la pena el arreglo,
Yo creo que es dificil de entender por que es un algoritmo basado en recursividad o eso veo yo,toca prestarle mucha atencion y gastarle un buen tiempo y meterle su buena logica
Con tigo estoy aprendiendo a programar. Tus videos son muy buenos y haces honor a tu cuenta "código facilito" pero tengo una queja desde siempre.... Nunca explicas algo tan insignificante pero para los que apenas estamos iniciando es una gran duda.. Y es porque en algunas variables usas " paréntesis" y en otras "corchetes" .. Y porque en algunos lados usas punto y coma y en otros no pones nada.. Es algo muy básico pero para los que estamos iniciando aveces nos confundimos.
No necesitas libros para aprender eso. Googlea y vas a encontrarlo muy bien explicado. Igualmente te comento que eso es algo muy de la base de la programación y esto es un algoritmo relativamente avanzado. Te conviene aprender la base y despues seguir con cosas mas complejas. Lo de los corchetes, son arrays o vectores (es lo mismo con otro nombre) y los parentesis, supongo que te referis a los metodos, son funciones a las que hay que pasarle parametros, los cuales van entre parentesis.
Esta parte de codigo es necesaria?, por que creo no hace nada ya que numeros[izq] y numeros[pivote] valdría el mismo valor así que nunca seria valido. Espero alguien pueda responderme, gracias. while (numeros[izq] < numeros[pivote] && izq < der) izq++;
bien el esquema, después es mucho ciclo, y ciclo, creando las variables, y sabiendo poner en el lugar correctos las variables en los ciclos, no es tan difícil, creo que hay que tener mas memoria, solo para no perderse, después el ciclo hace lo suyo.
Lo probé y este código solo funciona con arreglos de dimensiones pequeñas,luego da un error de recursividad infinita.Trate de controlarlo con try and catch pero sucedió que no ordena correctamente este vector. Podrías dar alguna solución a este problema.
Seguramente el error que te ha dado es este: Exception in thread "main" java.lang.OutOfMemoryError: Java heap space Cuando el vector es muy grande se necesitan hacer muchas llamadas recursivas al método para ordenarlo y con cada llamada recursiva estamos consumiendo memoria. La memoria durante la ejecución del programa la obtenemos de una zona llamada heap y cuando se agota aparece el error.
disculpa, estoy seguro de que tu codigo si funciona a la perfeccion pero... hay alguna forma de hacerlo sin recursividad? esk estoy haciendo un proyecto con todos los metodos y la recursividad de tu codigo me jode todo y no se como convertirlo a mi codigo ayuda porfa
cuando "if" o "else" no llevan llaves, se toma en cuenta hasta la primera linea y ya no la segunda linea, por eso ves un return despues de "else" y otro return que pertenece al if que encierra todo con sus llaves.
//copie el codigo pero no me corrio. public class Intentos{ public static int[] arreglarArreglo(int[] _arreglo){ return arreglarArreglo2(_arreglo, 0,(_arreglo.length-1)); } private static int[] arreglarArreglo2(int _arreglo[], int izquierda, int derecha){ // caso uno if (izquierda>=derecha) return _arreglo; // caso dos. int i=izquierda, d=derecha; if (i != d) { int pivote, aux; pivote=izquierda; while (izquierda!=derecha) { while (_arreglo[derecha]>=_arreglo[pivote] && izquierda
Deberias explicar mejor los conceptos porque la gente que trata de aprender desde cero se queda con muchas dudas y sabiendo ni siquiera la mitad de las cosas
este procedimiento ya es para gente que tenga conocimientos previos a programar de lo contrario busca el algoritmo burbuja que es mas facil hace lo mismo pero es mas tardado en completar la ejecucion
la verdad viendo más tranquilamente el video, este no es como otros, la parte en powerpoint te quedó bien, pero el código como la mierda, la indentación pésima, pareciera que hubiera un while anidado dónde no lo hay y se confunde el proceso que realiza cada if o while.
gracias,, muchas gracias de verdad a mi profesor de la universidad no le entiendo nada nada.pero a usted, le entiendo muy bien, explica de una manera sencilla, y clara.
gracias por esta magnifica oportunidad, de esta manera puedo sacar mi carrera adelante, ya que me estaba desmotivando por no entender la programacion, Dios lo bendiga. saludos desde Bogotá colombia....
public class Ordenador{
public void ordenarQ(int[] array){
array = quicksort1(array);
}
public int[] quicksort1(int numeros[]){
return quicksort2(numeros,0,numeros.length-1);
}
public int[] quicksort2(int numeros[],int izq, int der){
if(izq>=der)
return numeros;
int i=izq, d=der;
if(izq!=der){
int pivote;
int aux;
pivote = izq;
while(izq!=der){
while(numeros[der]>=numeros[pivote] && izq
gracias isac no podia entender nada con la identacion tan asquerosa de este men...
Héroe!
me quebré la cabeza porque pusiste mal el nombre del método
@@RD-sp4ex contexto
@@Josue-hh7wqcopió todo y no le corría
Me encantó tu explicación. La verdad es que hace muchos años no le entendí al Quicksort y ya le entendí. No tengo problema con la recursividad, pero en particular este algoritmo no lo entendía.
Me encanta los vídeos que manejas, estoy en la transición de lenguaje, me jode un poco que no tabules bien el código.
(muchas gracias por el aporte).
s17.postimg.org/qgyqe47cv/algoritmo.png
(tabulado) mas fácil de transcribir.
Bien explicado, solo un problema de código, ayudaría bastante si señalas con las llaves el inicio y final de cada sentencia y respetar las sangrías.
El video es mucho mas q interesante. Solo hace falta practicarlo mucho y dar las gracias al profesor por toda su paciencia.
La explicación de la lógica cumple mas o menos con el ordenamiento quickSort (aunque en si el ordenamiento se hace de una manera un poco diferente).
Lo que si es que el código no es para nada Quicksort tengo 3 observaciones respecto a eso si gustan pueden hacer las pruebas
1.- el while que se supone va a ir incrementando el izq (izq++) NUNCA SE EJECUTA
2.- quicksort2(numeros, i, izq - 1) Nunca realiza modificaciones al array siempre cae en la condicional que esta al principio para retun numeros;
NOTA: si eliminas esas dos partes del codigo, va a seguir realizando de forma correcta el ordenamiento
3.- ese algoritmo lo que hace para el ordenamiento es ir posicionando del lado izquierdo los numero mas pequeños hasta terminar de recorrer todos sus elementos, un poco parecido al insert sort
Lo que tanto me gusta de estos videos es que no duran 40 minutos, hora y media...
Y le entiendo.
me han servido de mucho los tutos y espero que mas mujeres como yo se animena a aprender programacion ya que esto tambien lo odemos hacer nosotras gracias jorge por compartir tus conocimientos un saludo desde colombia para ti y un besito de mi parte
Hola muchas gracias por el aporte.
Creo que se puede mejorar bastante el codigo, y hay cosas que te confunden, como por ejemplo le estás modificando el valor de los parametros "izq" y "der" en lugar de modificar los valores "i" y "d" que son los que deberías aumentar y disminuir de valor.
Que tal amigo! excelente vídeo, le eh entendido muy bien! muchas gracias...
Podrías hacer un vídeo en la cual expliques la forma de hacer el camino mas corto en grafos? para mi es un tema algo difícil y hasta ahora no eh podido hacerlo! te agradecería mucho si lo haces!
El problema de no manejar identacion es que no se sabe cuándo se abre o cierra un ciclo, bucle o condicional.
Buen vídeo, gracias por los anteriores también, pero... enserio tabula... o si no te gusta tabular siempre puedes hacer ctrl + shift + f.
Seguir tu código fue una aventura en esta ocasión.
igualmente gracias por tu tiempo
Me parte los ojos la mala indentación
Muy bien explicado😀👏👏 muchas gracias!!!
Muchas gracias por la explicación😁
esta muy bien expuesto ... enhorabuena por el video-tutorial entero
hola, muchas gracias por todo el tutorial, evidentemente como vos decis es muy dificil entenderlo a la primera, la duda que me queda es por que retorna numeros 2 veces seguidas?
Nada es "muy excelente", la excelencia es lo maximo que se puede alcanzar. En teoría, no existe nada mejor que esto, por lo tanto, decir "muy excelente" es redundante.
El video tiene sus años pero desde mi ignorancia no me explico el porque el nombre tan largos de las variables quick1; quick2 o lo que sea pones lo siguiente quicksort_punto_net_punto_ar_punto_mx_punto_us_punto_irak_punto_com (JOptionPane.showInputDialog("Sarcasmo no te ofendas"); siendo de que declarando quick1, quick2 y asi sucesivamente estaria mejor y mas entendible, Saludos!!
en que parte estas decidiendo de que si los numeros son iguales se deben ir a la izquierda o derecha?
me desespera como no usas la tabulación para marcar el anidado...
Gracias por la explicación y el código, aunque tengo que admitir que esa desastrosa identación me iba causando algunos dolores de cabeza.
es indispensable los tres metodos quicksort que creó para poder ordenar un arreglo???
una pregunta, el método Arrays.sort que es el que usa java es el mismo que quickSort? o algun otro como shell, merge, etc? o este no tiene como tal un parecido con alguno de estos?
Muchas gracias, me sirvió mucho para implementarlo en un proyecto
excelente explicacion, ni mi maestro de programacion me explicaria asi, muchas gracias por compartir el conocimiento. podrias hacer uno de shell porfavor
Parece estar el código al contrario que la explicación. Lo que cuadraría con la explicación sería el while de la izq por encima con . Y parece que falta la sustitución de la posición del pivote.
oye amigo para listas dobles no tienes ejemplos como hacer efectiva la utilizacion del metodo quicksort para ordenar nodos.
ok.....creo que tendre pesadillas esta noche hahaha
Buen video, bien explicado como siempre
No entiendo el sentido de poner dos if que se contradicen, siendo que podrias poner solo uno y por descarte seria el otro, es decir un if-else. Ademas pones innecesariamente Else: return numeros, podrias haberlo puesto dentro del if(der==izq). Por otro lado, la mala identacion y que no pongas corchetes en algunos ciclos, hace que no se entienda mucho el orden...
ME SUENA BASTANTE REDUNDANTE, POR QUÉ NO EN LUGAR DE DOS MÉTODOS, LO METES EN UNO? Y POR QUÉ EN LUGAR DE SUBSTITUIR I=IZQ, DEJAS O I O IZQ?
Es en el contexto. Decir muy excelente esta mal dicho, el muy sobra, intenta googlear eso. También puedes ver esta animación, lo explica mucho mejor que yo.
entiendo se uso int para entender mejor, pero yo voy a usar números doubles,, números de hasta 10.000 , en el arreglo, solo para que valga la pena el arreglo,
Deberías dejar el ejercicio en block de notas en la descripción u algo parecido.
es necesario esta linea: "while(numeros[izq] < numeros[pivote] && izq < der) izq++;" ???
Excelente aportacion:D , Podrias hacer el RadixSort?
Yo creo que es dificil de entender por que es un algoritmo basado en recursividad o eso veo yo,toca prestarle mucha atencion y gastarle un buen tiempo y meterle su buena logica
Con tigo estoy aprendiendo a programar. Tus videos son muy buenos y haces honor a tu cuenta "código facilito" pero tengo una queja desde siempre.... Nunca explicas algo tan insignificante pero para los que apenas estamos iniciando es una gran duda.. Y es porque en algunas variables usas " paréntesis" y en otras "corchetes" .. Y porque en algunos lados usas punto y coma y en otros no pones nada.. Es algo muy básico pero para los que estamos iniciando aveces nos confundimos.
un programador aprende de los libros y se apoya en los videotutoriales, en los libros todo esta muy bien explicado.
No necesitas libros para aprender eso. Googlea y vas a encontrarlo muy bien explicado. Igualmente te comento que eso es algo muy de la base de la programación y esto es un algoritmo relativamente avanzado. Te conviene aprender la base y despues seguir con cosas mas complejas. Lo de los corchetes, son arrays o vectores (es lo mismo con otro nombre) y los parentesis, supongo que te referis a los metodos, son funciones a las que hay que pasarle parametros, los cuales van entre parentesis.
muy buena explicación, me encantó
Muchas gracias por el tutorial.
DISCULPA COMO PUEDO ORDENAR ASÍ MISMO UN ARREGLO PERO QUE EL USUARIO INGRESE EL VALOR DE CADA POSICIÓN ¿¿??? Y LO ORDENE CON EL MÉTODO QUICKSORT
Muy buena explicacion ;; Gracias
Esta parte de codigo es necesaria?, por que creo no hace nada ya que numeros[izq] y numeros[pivote] valdría el mismo valor así que nunca seria valido. Espero alguien pueda responderme, gracias.
while (numeros[izq] < numeros[pivote] && izq < der)
izq++;
Muy buena explicación.
¿Como podria ordenar numeros guardados en una lista simple mente enlazada en nodos?
bien el esquema, después es mucho ciclo, y ciclo, creando las variables, y sabiendo poner en el lugar correctos las variables en los ciclos, no es tan difícil, creo que hay que tener mas memoria, solo para no perderse, después el ciclo hace lo suyo.
Funciona de igual manera en el JCreator?
public int[] quicksort(int numeros[], int izq, int der) {
if (izq >= der) {
return numeros;
}
i = izq;
d = der;
if (izq != der) {
pivote = izq;
while (izq != der) {
while (numeros[der] >= numeros[pivote] && izq < der) {
der--;
}
while (numeros[izq] < numeros[pivote] && izq < der) {
izq++;
}
if (der != izq) {
aux = numeros[der];
numeros[der] = numeros[izq];
numeros[izq] = aux;
}
}
if (izq == der) {
quicksort(numeros, i, izq - 1);
quicksort(numeros, izq + 1, d);
}
} else {
return numeros;
}
return numeros;
}
Excelente explicación pero para la próxima mejora la identacion.
Gracias...!!!
una pregunta, es que cuando pongo un array de 50,000 numeros llega a tener un bug me podrias ayudar!!
gran explicación!
Saludos, ¿que método puedo utilizar para ordenar una Linked List?
Ayuda, no veo los capítulos del 23 al 26, o no existen ?
Lo probé y este código solo funciona con arreglos de dimensiones pequeñas,luego da un error de recursividad infinita.Trate de controlarlo con try and catch pero sucedió que no ordena correctamente este vector. Podrías dar alguna solución a este problema.
Seguramente el error que te ha dado es este:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
Cuando el vector es muy grande se necesitan hacer muchas llamadas recursivas al método para ordenarlo y con cada llamada recursiva estamos consumiendo memoria. La memoria durante la ejecución del programa la obtenemos de una zona llamada heap y cuando se agota aparece el error.
Buen código :D (Hola Gimeno)
acabas de salvarme la vida
Dios me vas a hacer dormir
los q tanto critican hagan sus vídeos y dejen de estar ching...o...hay muchos vídeos q empiezan desde cero
Muy buen video👍
¿Hay capítulos entre el 22 y el 27? Muchas gracias.
No tiene el codigo en alguna página?
No veo los capítulos del 23 al 26, ayuda por favor.
Muy buen video! Me ayudó muchísimo ;)
disculpa, estoy seguro de que tu codigo si funciona a la perfeccion pero... hay alguna forma de hacerlo sin recursividad? esk estoy haciendo un proyecto con todos los metodos y la recursividad de tu codigo me jode todo y no se como convertirlo a mi codigo
ayuda porfa
pues este método funciona gracias a la recursividad, así como el ordenamiento en los arboles binarios ....
Vaya podrias haber especificado que lo ibas a hacer de forma recursiva :S
No sé qué hice mal, pero, cuando ejecuto me sale esto [I@2d363fb3 en vez de los números
Deberías poner los corchetes siempre, si no hace confuso el código
me marca un error en el else
estoy aprndiendo este metodo en mis clases, podrias prestarme tus codigos de metodos de ordenamiento porfa.
si :3
Juela!! Es el algoritmo más complicado que había visto hasta ahora, muy, muy difícil de entender... :(
una pregunta amigo porque hay 2 return numeros al final?
cuando "if" o "else" no llevan llaves, se toma en cuenta hasta la primera linea y ya no la segunda linea, por eso ves un return despues de "else" y otro return que pertenece al if que encierra todo con sus llaves.
???
:s
Por favor haz uno del metodo shell
ESTA MUY EXCELENTE
Cuando dices que es más rápido ¿a que te refieres?... En eso no lo sigo.
//copie el codigo pero no me corrio.
public class Intentos{
public static int[] arreglarArreglo(int[] _arreglo){
return arreglarArreglo2(_arreglo, 0,(_arreglo.length-1));
}
private static int[] arreglarArreglo2(int _arreglo[], int izquierda, int derecha){
// caso uno
if (izquierda>=derecha) return _arreglo;
// caso dos.
int i=izquierda, d=derecha;
if (i != d) {
int pivote, aux;
pivote=izquierda;
while (izquierda!=derecha) {
while (_arreglo[derecha]>=_arreglo[pivote] && izquierda
Deberias explicar mejor los conceptos porque la gente que trata de aprender desde cero se queda con muchas dudas y sabiendo ni siquiera la mitad de las cosas
+john nick tienen 23 videos antes de este en el curso para que practiques, aprendas, busques por tu cuenta y llegues aquí sin estar en ceros.
este procedimiento ya es para gente que tenga conocimientos previos a programar de lo contrario busca el algoritmo burbuja que es mas facil hace lo mismo pero es mas tardado en completar la ejecucion
este ordenamiento no es para iniciados en programacion es mas bien para un nivel intermedio
error en el else...
cómo ordeno Strings, (nombres, apellidos, etc...)
+John Osorio en C++ vienen sobrecargados los operadores >, =,
buen tutorial!!!
tu codigo no soporta 150 000 numeros
grato muito bem explicado seu tutorial
oye bro y el código fuente donde lo descargo?
Otoniel Heriberto Robles González nunca deja el código ese siempre lo tienes que escribir tu... O almenos eso me he dado cuenta en este blog.
bueno no se entiende a la primera, pero es java real.
yo esto no lo pillo, creo que no doy pa tanto
Me confundí más de lo que estaba
Ojo que despues de este video #22 se salta al #27, aqui esta el enlance del siguiente (#23)
th-cam.com/video/ZoCk8w86JlU/w-d-xo.html
la verdad viendo más tranquilamente el video, este no es como otros, la parte en powerpoint te quedó bien, pero el código como la mierda, la indentación pésima, pareciera que hubiera un while anidado dónde no lo hay y se confunde el proceso que realiza cada if o while.
no entendi ni mierda
Camilo Camargo Tmre yo tampoco :v
Pero si el pudo entenderlo entonces por que nosotros no?
Yonatann Peres Asi perrin, tu tambien puedes hacerlo
mm pudes pasar tu codigo...
métodos de búsqueda
no entendí un carajo
amigo me podras ayudar con el metodo shell
tu identacion esta hecha con las patas carnal...
no me funiono :(
lo haces por recursividad y te ahorras sufrimirntos.