Programación en C: 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 p>
# 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) p >
{
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) { p>
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)); p>
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]);