Red de conocimiento informático - Descarga de software - Programación en C: Encontrar los valores máximo y mínimo de una matriz

Programación en C: Encontrar los valores máximo y mínimo de una matriz

Puede utilizar Divide y couquer para encontrar los valores máximo y mínimo de una matriz.

Divida la matriz en partes izquierda y derecha, primero encuentre los valores máximo y mínimo de la parte izquierda, luego encuentre los valores máximo y mínimo de la parte derecha y luego combínelos para encontrar los valores máximo y mínimo de toda la población. Este es un proceso recursivo. Este proceso también se repite para las partes izquierda y derecha separadas hasta que solo quede uno o dos elementos en el intervalo separado.

El código del programa es el siguiente:

# incluir ltiostream gt

# incluir ltcassert gt

# incluir lt algoritmo gt

# incluir lt funcional gt//Para ltint gt() más grande

//Implementación del método divide y conquistarás

STD::pair lt, int gtsearchMaxMin( int a[], int low, int high)

{

Aserción (a! = NULL amp amp high gt = low

if (high); - bajo lt= 1)

devolver a[alto] gt; a[bajo]? STD::make_pair(a[alto], a[bajo]): STD::make_pair(a[bajo], a[alto]);

int mid = bajo (alto bajo) /2;

STD::pair lt; int, int gtL = searchMaxMin(a, bajo, medio);

STD::pair lt; int gtR = searchMaxMin( a, medio); 1, alto);

int valor máximo = (l . primero gt; R. primero? l . primero:

int minValue = (l .segundo lt); ;R.segundo?l.segundo:r.segundo);

return std::make_pair(maxValue, minValue);

}

//Buscar el número más grande y el segundo más grande.

Si no existe tal método, la complejidad temporal para encontrar el valor k-ésimo en la matriz es

STD::pair lt; int gtsearchMaxSecond(int a[], int low, int high)

{

Aserción (a!= NULL amp amp high gt=low

if (high-low lt= 1)

devolver un gt [alto]; STD::make_pair(a[alto], a[bajo]): STD::make_pair(a[bajo], a[alto]);

int mid = bajo (alto bajo) /2;

STD: :pair lt; int gtL = searchMaxSecond(a, bajo, medio);

STD: :pair lt, int gtR = searchMaxSecond( a, medio); 1, alto);

int valor máximo = 0;

int segundo valor = 0

if(l . primer gt; primero) {

maxValue = L.primero

segundo valor =(l. segundo gt; R. primero? l. segundo: r. primero);

} En caso contrario {

maxValue = R.primero

segundo valor = (l . primer gt; R.segundo? primer lugar: segundo lugar

}

);

return std::make_pair(maxValue, segundo valor);

}

int main()

{

int a[] = {6, 5, 8, 3, 9, 7};

const int N = tamañode(a)/tamañode(a[0]);

STD ::pair lt; int gtmaxMin = searchMaxMin(a, 0, N-1);

assert(maxmin.first = = * STD::max_element(a, a N));

assert(maxmin. segundo = = * STD::min_element(a, a N));

assert(maxmin. primero = = *( std::minmax_element(a,a N) )).segundo) amp amp

maxmin.segundo = = *(std::minmax_element(a,a N).first)) ;

STD::pair lt;int , int gtmaxSecond = searchMaxSecond(a, 0, N-1);

std::partial_sort(a, a 2, a N, STD:: mayor lt; int gt()); >

assert(maxsegundo. primero = a[0]);

assert(maxsegundo. segundo = a[1]);