我试图找到一种有效的方法来查找当前元素右侧的所有元素的计数,其值小于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");
}
非常感谢任何帮助。
答案 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++;
}
}
将告诉您有多少数组元素的值小于您的引用元素。如果你想要一个列表中哪些元素(数组索引)满足条件,它会变得更复杂......