Su código no funciona debido a un error lógico en su función de partición ().
Al final de su ciclo en la función, tiene ‘pindex’ en la posición donde debe ir el siguiente elemento más pequeño que el pivote, pero debido a que el ciclo tiene fin, sabe que todos los elementos más pequeños que / iguales al pivote son ya en el rango [inicio + 1, pindex). Debido a esto, el último paso de partición que intercambia el elemento pivote con un [pindex]:
- intercambie el elemento pivote con un elemento más grande que el pivote. Esto rompe todo el punto de partición.
- intercambie el elemento pivote con algo que ni siquiera está en el límite de la matriz. Piense en el caso cuando todos los elementos son más pequeños que el pivote. ¿Qué valor tiene pindex después de que el ciclo termina en tal disposición?
Como solución para solucionar el problema, intercambie el elemento pivote con el elemento en [pindex – 1] en lugar del elemento en [pindex].
- ¿Es necesario tener datos estacionarios para aplicar algún tipo de algoritmo de aprendizaje automático?
- Cómo definir una estructura de datos de gráfico dinámico en C ++ (un gráfico que tiene un número desconocido de vértices)
- ¿Cuáles son los diferentes usos de la estructura de datos Trie?
- ¿Cuál es la principal ventaja de utilizar la búsqueda de profundización iterativa en comparación con la búsqueda de amplitud primero?
- Dado un gráfico dirigido, ¿podemos hacer DFS en cada nodo para encontrar el nodo de mayor valor?