Technopolice
Technopolice

Reputation: 497

Finding count of all elemets to the right of current element whose value is less than current element in an array in C

I am trying to find an efficient way to find count of all elemets to the right of current element whose value is less than current element in an array in C.

For example:

My array is, R = [2, 4 ,3 ,1]

Then for 2, elements on right of 2 are (4,3,1), among which less than 2 is 1. So the count is 1. Then for 4, elements on right of 4 are (3,1), among which less than 4 is 3 and 1. So the count is 2. Then for 3, elements on right of 3 are (1), among which less than 3 is 1. So the count is 1. Then for 1, Nothing on right of 1 , so nothing is less so count is 0.

So the output array (Containing all the counts) is [ 1,2,1].

How to do it efficiently in C?

I wrote the following code snippet, which seems to be incorrect:

for( i = 0 ; i < size; i++ ) {
      index = find_index(R,size,R[i]);

      for( j = index+1 ; j < size; j++ ) {
         values_to_right[j] = R[j]; 

      }
     print_array(values_to_right, size);  
      printf("\n****************\n");
  } 

Where as my find_index() and print_array() functions are as follows:

int find_index(int a[], int num_elements, int value)
{
   int i;
   for (i=0; i<num_elements; i++)
   {
     if (a[i] == value)
     {
        return(i);  /* it was found */
     }
   }
   return(-1);  /* if it was not found */
}




void print_array(int a[], int num_elements)
{
   int i;
   for(i=0; i<num_elements; i++)
   {
     printf("%d ", a[i]);
   }
   printf("\n");
}

Any help will be much appreciated.

Upvotes: 0

Views: 214

Answers (2)

Nicolas Miari
Nicolas Miari

Reputation: 16256

int i = 0; 
// Used as loop index

int currentValue = myArray[currentIndex]; 
// Holds value at current element

int count = 0; 
// Will hold How many elements have smaller values (your question)

for(i = 0; i < currentIndex; i++){

   if(myArray[i] < currentValue){
       count++;
   }
}

Will tell you how many array elements have a smaller value than your reference element. If you want a list of which elements (array indices) satisfy the condition, it gets more complicated...

Upvotes: 1

Gopi
Gopi

Reputation: 19874

Check the code below:

#include <stdio.h>

int main(void) {
    int a[4] = {2,4,3,1};
    int b[4];
    int i,sum,k=0,j;
    for(i=0;i<4;i++)
    {
        sum =0;
        for(j=i+1;j<4;j++)
        {
            if(a[j] < a[i])
            sum ++;
        }
        b[k++] = sum;
    }
    for(i=0;i<k;i++)
    printf("%d ",b[i]);
    return 0;
}

Upvotes: 2

Related Questions