Encuentra n elementos más grandes de una matriz

Tengo una matriz

A[4]={4,5,9,1} 

Lo necesito daría los primeros 3 elementos superiores como 9,5,4.

¿Sé cómo encontrar el elemento max pero cómo encontrar el max 2 y 3?

es decir, si

 max=A[0] for(i=1;imax) { max=A[i]; location=i+1; } } 

en realidad, la clasificación no será adecuada para mi aplicación porque,

El número de posición también es importante para mí, es decir, tengo que saber en qué posiciones se producen los primeros 3 máximos, aquí está en la posición 0, 1 y 2 … así que estoy pensando en una lógica.

eso después de obtener el valor máximo si pudiera poner 0 en esa ubicación y podría aplicar los mismos pasos para esa nueva matriz, es decir, {4,5,0,1}

Pero estoy un poco confundido de cómo poner mi lógica en el código

Considere usar la técnica empleada en la biblioteca estándar de Python. Utiliza una estructura de datos de montón subyacente:

 def nlargest(n, iterable): """Find the n largest elements in a dataset. Equivalent to: sorted(iterable, reverse=True)[:n] """ if n < 0: return [] it = iter(iterable) result = list(islice(it, n)) if not result: return result heapify(result) for elem in it: heappushpop(result, elem) result.sort(reverse=True) return result 

Los pasos son:

  1. Hacer una matriz fija de n longitud para mantener los resultados.
  2. Rellene la matriz con los primeros n elementos de la entrada.
  3. Transformar la matriz en un minheap .
  4. Repite el bucle sobre las entradas restantes, reemplazando el elemento superior del montón si el nuevo elemento de datos es más grande.
  5. Si es necesario, ordena los n elementos finales.

El enfoque de almacenamiento dynamic es eficiente en memoria (no requiere más memoria que la salida de destino) y generalmente tiene un número muy bajo de comparaciones (consulte este análisis comparativo ).

Puede utilizar el algoritmo de selección.

También mencionar que la complejidad será O (n), es decir, O (n) para la selección y O (n) para la iteración, por lo que el total también es O (n)

Lo que esencialmente estás preguntando es equivalente a ordenar tu matriz en orden descendente. La forma más rápida de hacer esto es usar heapsort o quicksort dependiendo del tamaño de su matriz.

Una vez que su matriz esté ordenada, su número más grande estará en el índice 0, su segundo más grande estará en el índice 1, …., en general, su número más grande estará en el índice n-1

puedes seguir este procedimiento,
1 . Agregue los n elementos a otra matriz B[n] ;
2 . Ordenar la matriz B[n]
3 . Luego para cada elemento en A[n...m] cheque,
A[k]>B[0] si es así, el número A[k] está entre n elementos grandes, por lo que
busque la posición adecuada para A[k] en B[n] y reemplace y mueva los números a la izquierda en B[n] para que B[n] contenga n elementos grandes.
4 . Repita esto para todos los elementos en A[m] .
Al final, B[n] tendrá los n elementos más grandes.