Código C++, ¡ayuda! ! ! ! Necesidad urgente! ! !
# include & ltiostream & gt
# include & ltalgorithm& gt
Usar namespace std
const int N = 1e 5;
int n, k, a[N];
int main()
{
CIN>>n>>k;
for(int I = 0;i<n;i++)CIN>>a[I];
for(int I = 0;i<n;) p>
{
int t = min(i + k + 1, n //Calcula el punto final derecho del intervalo de operación [i+1, t]
auto it = min_element(a + i, auto//Encuentra el valor mínimo del intervalo de operación.
if(it-a & gt; I) //Si el valor mínimo no está al principio del intervalo, realice una operación de intercambio
for(int j = it-a;j>i;j-) swap(a[j],a[j- 1]);
i++;
}
for(int I = 0;i<n;i++)cout <<a[I] & lt;& lt" ";
cout & lt& ltendl
Devuelve 0;
}
El código utiliza un algoritmo codicioso. Seleccione el intervalo [i+1, t] del valor actual. posición para la operación, donde el método de cálculo del punto final derecho t es t = \ min (I + k + 1, n), luego encuentre el valor mínimo en el intervalo, si el valor mínimo no está al comienzo del intervalo; cambie a la izquierda en secuencia con los números anteriores hasta la posición mínima. De esta manera, el orden del diccionario se puede mantener lo más pequeño posible
.