Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

195
Vistas
tratando de escribir un algoritmo de ordenación rápida sin hacer 2 listas nuevas y agregarlas, no puedo averiguar cuál es el problema

Acabo de empezar a codificar y he intentado varias horas para averiguar por qué no obtendría una salida de terminal. ¿Alguna suposición?

 const unsortedArray = [1, 10, 5, 8, 7, 6, 4, 3, 2, 9]; let initialIndex, finalIndex, i, j; function quickSort(initialIndex, finalIndex, unsortedArray) { if(initialIndex >= finalIndex) { return unsortedArray; } let key = initialIndex; let i = initialIndex + 1; let j = finalIndex; while(i <= j) { while (unsortedArray[i]<=unsortedArray[key] && i<finalIndex) { i++; } while (unsortedArray[j]>=unsortedArray[key] && j>initialIndex) { j--; } if(i > j) { let temp = unsortedArray[initialIndex]; unsortedArray[initialIndex] = unsortedArray[j]; unsortedArray[j] = unsortedArray[initialIndex]; } else { let temp = unsortedArray[i]; unsortedArray[i] = unsortedArray[j]; unsortedArray[j] = temp; } } quickSort(initialIndex,j-1,unsortedArray); quickSort(j+1,finalIndex,unsortedArray); return unsortedArray } function showSortedArray (unsortedArray) { quickSort(0, unsortedArray.length-1, unsortedArray); console.log(unsortedArray); } showSortedArray(unsortedArray);

He encontrado otras formas (creando dos nuevas matrices y agregando izquierda y derecha), pero quiero tener éxito en este método.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El ordenamiento rápido más simple que he logrado encontrar es este:

 function quicksort(arr) { if (arr.length == 0) return []; var left = [] var right = [] var pivot = arr[0]; for (var i = 1; i < arr.length; i++) { if (arr[i] < pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quicksort(left).concat(pivot, quicksort(right)); }

Y una versión para matrices 2D:

 function quicksort_2D(options) { /* options: arr - arr to sort sortcol - column position to sort on sorttype - */ if (options.arr.length == 0) return []; var left = [] var right = [] var pivot = options.arr[0][options.sortcol]; for (var i = 1; i < options.arr.length; i++) { if (options.arr[i][options.sortcol] < pivot) { left.push(options.arr[i]); } else { right.push(options.arr[i]); } } var pivotarr=[options.arr[0]] var retval = quicksort_2D({arr: left, sortcol: options.sortcol, sorttype: options.sorttype}).concat(pivotarr, quicksort_2D({arr: right, sortcol: options.sortcol, sorttype: options.sorttype})); return retval }
over 4 years ago · Santiago Trujillo Denunciar

0

Su función entrará en un ciclo infinito cada vez que i y j sean iguales al valor finalIndex.

El problema es esta línea aquí:

 while (unsortedArray[i]<=unsortedArray[key] && i<finalIndex) { i++; }

Debido a que tiene i<finalIndex , nunca llego a finalIndex, lo que debería porque es un valor válido que puede necesitar ser intercambiado (esto contrasta con el valor de clave/índice inicial que es el pivote/límite y se maneja de manera diferente) .

Podrías cambiarlo a esto:

 while (unsortedArray[i]<=unsortedArray[key] && i<=finalIndex) {

Pero ahora obtendrá un error de matriz fuera de los límites después de que pase finalIndex, por lo que debe cambiarlo a esto:

 while (i<=finalIndex && unsortedArray[i]<=unsortedArray[key]) {

Entonces ahora verificará primero el límite de la matriz, antes de intentar acceder a la matriz. Esto debería solucionar tus problemas.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda