2 respuestas

La mejor respuesta

Si está interesado en encontrar el valor mínimo en una matriz y está interesado en la "frecuencia" en la que la define como si el recuento del mínimo es par o impar, ¿quizás esto es lo que necesita?

int findMinAndFreq(int A[], int N){
   if(N == 0){
      printf("Array is empty");
      return 0;
   }
   if(N == 1){
      return 1;
   }

   int min = A[0];
   int count = 1;
   for(int i = 1; i<N; i++){
      if(A[i] == min){
         count++;
      }
      if(A[i] < min){
         min = A[i];
         count = 1;
      }
   }
   return count%2;
}
2
Miket25 11 ago. 2017 a las 17:01

El problema está aquí:

    for(i=0;i<N;i++)
    {
        if( A[i]<=A[i+1])
        {
        ...

En la última iteración del ciclo cuando i es N-1, A[i+i] es un elemento más allá del final de la matriz. Leer más allá del final de una matriz invoca comportamiento indefinido.

También está subiendo el elemento más pequeño de la lista. No es necesario modificar la lista, ya que está realizando un seguimiento de los valores mínimos.

En lugar de verificar los elementos adyacentes, simplemente debe comparar el elemento actual con el mínimo. Tampoco es necesario mover elementos y no es necesario agregar un caso especial para una matriz de 1:

int findMin(int A[], int N)
{
    int min;
    int i;

    min = A[0];
    for(i=0;i<N;i++)
    {
        if(A[i] < min)
        {
            min = A[i];
        }
    }

    return freq(min,A,N);
}

Tampoco es necesario que recorra la lista dos veces, ya que puede contar el número de veces que ve el mínimo a medida que recorre la lista.

2
dbush 11 ago. 2017 a las 17:20