Proporcione un algoritmo O (n) que toma como entrada una matriz S, luego divide S en tres conjuntos: negativos, ceros y positivos. Muestre cómo implementar esto en su lugar, es decir, sin asignar memoria nueva. Y debes mantener la secuencia relativa del número. por ejemplo: {-1, 4, 0, -2, 1, 2} ==> {-1, -2, 0, 4, 1, 2}¿Cómo ordenar una matriz de enteros en negativo, cero, parte positiva sin cambiar la posición relativa?
No estoy seguro de si tales una solución sale Las mejores soluciones que puedo pensar son:
Solución 1: Usando una matriz de enteros extra, recorra toda la matriz para obtener negativos, luego 0s, luego positivos.
Solución 2: No mantener la secuencia relativa del número. Después coloca la matriz dos veces:
template <typename Type>
void Partion(Type *array, int begin, int end, Type v, int &l, int &r)
{
l = begin;
for (int i=begin; i!=end; ++i)
{
if (array[i] < v)
swap(array[i], array[l++]);
}
r = l;
for (int j=l; j!=end; ++j)
{
if (array[j] == v)
swap(array[j], array[r++]);
}
}
¿Qué hay de tres bucles, uno para cada conjunto, haciendo un intercambio de burbujas cada vez que se encuentra un miembro del conjunto? – mmr
¿Está dividiendo la matriz en tres conjuntos (negativo, cero, positivo) manteniendo intactas las posiciones relativas de los números en cada conjunto? Te lo pregunto porque tu ejemplo parece contradictorio: '{-1, 4, 0, -2, 1, 2} ==> {-1, -2, 0, 1, 2, 4}'. Si los artículos están realmente clasificados, entonces -2 aparece antes de -1, y si se agrupan como '(-, 0, +)' mientras se mantienen intactas las posiciones relativas de los números en cada grupo, entonces el resultado debería ser '{-1 , -2, 0, 4, 1, 2} 'donde 4 aparece antes 1 y 2. – Anurag
@Anurag gracias por su notificación. Lo arreglé. – Gin