Encuentra el késimo número más pequeño

Un primer elemento de la matriz para encontrar cualquiera de la una, utilizando un rápido ordenar la matriz designada puntos, es decir, menos de un elemento en el lado izquierdo del mismo, un mayor que los elementos en el lado derecho del mismo. Luego determine si el elemento a satisface el k-ésimo número más pequeño del sujeto, y emita directamente si cumple, de lo contrario determine qué intervalo dividir a continuación.

 

Básicamente es lo mismo que el algoritmo de ordenación rápida, excepto que cuando se encuentra el k-ésimo número más pequeño, se sale directamente y la complejidad temporal es O (n)

 

// Encuentra el késimo número más pequeño 
# incluye <iostream> usando el espacio de nombres std;
 int find ( int le, int ri, int a []) // Encuentra la posición del elemento base {
     int base = a [le]; // Elemento base while (le < ri) 
    { while (le <ri && a [ri]> = base ) // Comience el procesamiento desde el extremo derecho de la secuencia, el mismo 
            ri mayor que la referencia ri-- ; 
        a [le] = a [ri]; // menor que la referencia El intercambio a la izquierda while (le <ri && a [le] <= base ) // Maneja el extremo izquierdo, menos que la base sin cambios
 
 
    
        

        
            le ++ ; 
        a [ri] = a [le]; // Intercambio mayor que la referencia a la derecha 
    }
     // Cuando los elementos de la izquierda son menores que la base y los elementos de la derecha son mayores que la base, entonces base es el elemento de referencia, le o ri es Posición del elemento de referencia 
    a [le] = base ;
     return le; 
} 
void quick_pow ( int le, int ri, int k, int a []) 
{ 
    if (le> = ri)
         return ;
     int pos = find (le, ri , a);
     if (k- 1 == pos) 
    { 
        cout << a [k- 1] << endl;
        volver ; 
    } 
    else  if (k- 1 < pos) 
        quick_pow (le, pos - 1 , k, a);
    else 
        quick_pow (pos + 1 , ri, k, a); 
} 

int main () 
{ 
    int n, k; 
    cin >> n >> k; 
 
    int a [ 1000 ];
    para ( int i = 0 ; i <n; i ++ ) 
        cin >> a [i]; 
 
    quick_pow ( 0 , n -1 , k, a); 
 
    devuelve  0 ; 
}

 

Supongo que te gusta

Origin www.cnblogs.com/-citywall123/p/12731860.html
Recomendado
Clasificación