查找当前元素右侧所有元素的计数,其值小于C中数组中的当前元素

时间:2014-12-17 08:15:27

标签: c arrays

我试图找到一种有效的方法来查找当前元素右侧的所有元素的计数,其值小于C中数组中的当前元素。

例如:

我的数组是R = [2, 4 ,3 ,1]

然后对于2,2右边的元素是(4,3,1),其中小于2是1.所以计数是1。 然后对于4,4右边的元素是(3,1),其中少于4是3和1.所以计数是2。 然后对于3,3右边的元素是(1),其中小于3是1.所以计数是1。 然后是1,在1的右边没有任何东西,所以没有什么可以少,所以计数是0。

所以输出数组(包含所有计数)是[1,2,1]。

如何在C中有效地进行?

我编写了以下代码片段,似乎不正确:

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");
  } 

我的find_index()和print_array()函数如下所示:

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");
}

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

检查以下代码:

#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;
}

答案 1 :(得分:1)

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++;
   }
}

将告诉您有多少数组元素的值小于您的引用元素。如果你想要一个列表中哪些元素(数组索引)满足条件,它会变得更复杂......