Ordenamiento Quicksort (Rápido!) en Java
HTML-код
- Опубликовано: 8 фев 2025
- 🚀 Desbloquea más de +170 cursos Premium a un precio especial: codigofacilito...
🐊 Síguenos en:
Twitter: / codigofacilito
Facebook: / codigofacilito
Instagram: / codigofacilito
TikTok: codigofacilito.oficial
----
Código Facilito es una de las plataformas de aprendizaje online de programación más grandes de habla hispana. Desde el 2010 formamos programadores en toda América Latina y España enseñando. HTML, JavaScript, React, Python, Rails, Go y mucho más.
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.
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
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.
Lo que tanto me gusta de estos videos es que no duran 40 minutos, hora y media...
Y le entiendo.
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.
El problema de no manejar identacion es que no se sabe cuándo se abre o cierra un ciclo, bucle o condicional.
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.
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.
Muy bien explicado😀👏👏 muchas gracias!!!
me desespera como no usas la tabulación para marcar el anidado...
Muchas gracias por la explicación😁
esta muy bien expuesto ... enhorabuena por el video-tutorial entero
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!
Me parte los ojos la mala indentación
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
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!!
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?
en que parte estas decidiendo de que si los numeros son iguales se deben ir a la izquierda o derecha?
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.
es indispensable los tres metodos quicksort que creó para poder ordenar un arreglo???
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...
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,
Muchas gracias, me sirvió mucho para implementarlo en un proyecto
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.
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
Dios me vas a hacer dormir
oye amigo para listas dobles no tienes ejemplos como hacer efectiva la utilizacion del metodo quicksort para ordenar nodos.
Muchas gracias por el tutorial.
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?
Deberías dejar el ejercicio en block de notas en la descripción u algo parecido.
excelente explicacion, ni mi maestro de programacion me explicaria asi, muchas gracias por compartir el conocimiento. podrias hacer uno de shell porfavor
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.
Muy buena explicacion ;; Gracias
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?
muy buena explicación, me encantó
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.
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
es necesario esta linea: "while(numeros[izq] < numeros[pivote] && izq < der) izq++;" ???
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.
Excelente explicación pero para la próxima mejora la identacion.
Gracias...!!!
Excelente aportacion:D , Podrias hacer el RadixSort?
¿Como podria ordenar numeros guardados en una lista simple mente enlazada en nodos?
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++;
los q tanto critican hagan sus vídeos y dejen de estar ching...o...hay muchos vídeos q empiezan desde cero
Ayuda, no veo los capítulos del 23 al 26, o no existen ?
gran explicación!
una pregunta, es que cuando pongo un array de 50,000 numeros llega a tener un bug me podrias ayudar!!
Saludos, ¿que método puedo utilizar para ordenar una Linked List?
Funciona de igual manera en el JCreator?
acabas de salvarme la vida
Juela!! Es el algoritmo más complicado que había visto hasta ahora, muy, muy difícil de entender... :(
Por favor haz uno del metodo shell
ok.....creo que tendre pesadillas esta noche hahaha
Buen video, bien explicado como siempre
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;
}
No veo los capítulos del 23 al 26, ayuda por favor.
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.
Vaya podrias haber especificado que lo ibas a hacer de forma recursiva :S
No tiene el codigo en alguna página?
¿Hay capítulos entre el 22 y el 27? Muchas gracias.
Deberías poner los corchetes siempre, si no hace confuso el código
No sé qué hice mal, pero, cuando ejecuto me sale esto [I@2d363fb3 en vez de los números
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
ESTA MUY EXCELENTE
Cuando dices que es más rápido ¿a que te refieres?... En eso no lo sigo.
me marca un error en el else
tu codigo no soporta 150 000 numeros
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 ....
estoy aprndiendo este metodo en mis clases, podrias prestarme tus codigos de metodos de ordenamiento porfa.
si :3
bueno no se entiende a la primera, pero es java real.
error en el else...
buen tutorial!!!
Muy buen video👍
Ojo que despues de este video #22 se salta al #27, aqui esta el enlance del siguiente (#23)
ruclips.net/video/ZoCk8w86JlU/видео.html
Buen código :D (Hola Gimeno)
//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
cómo ordeno Strings, (nombres, apellidos, etc...)
+John Osorio en C++ vienen sobrecargados los operadores >, =,
grato muito bem explicado seu tutorial
Me confundí más de lo que estaba
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
métodos de búsqueda
mm pudes pasar tu codigo...
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.
yo esto no lo pillo, creo que no doy pa tanto
no entendí un carajo
Muy buen video! Me ayudó muchísimo ;)
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
amigo me podras ayudar con el metodo shell
lo haces por recursividad y te ahorras sufrimirntos.
tu identacion esta hecha con las patas carnal...
no me funiono :(