🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 计算右侧较小的元素 > 原文: [https://www.geeksforgeeks.org/count-smaller-elements-on-right-side/](https://www.geeksforgeeks.org/count-smaller-elements-on-right-side/) 在数组中每个元素的右边编写一个函数以计算较小元素的数量。 给定一个不同整数的未排序数组`arr[]`,请构造另一个数组`countSmaller[]`,以便`countSmaller[i]`在数组中每个元素`arr[i]`的右侧包含较小元素的数量。 例子: ``` Input: arr[] = {12, 1, 2, 3, 0, 11, 4} Output: countSmaller[] = {6, 1, 1, 1, 0, 1, 0} (Corner Cases) Input: arr[] = {5, 4, 3, 2, 1} Output: countSmaller[] = {4, 3, 2, 1, 0} Input: arr[] = {1, 2, 3, 4, 5} Output: countSmaller[] = {0, 0, 0, 0, 0} ``` [](https://practice.geeksforgeeks.org/problem-page.php?pid=585) ## 强烈建议您在继续解决方案之前,单击此处进行练习。 **方法 1(简单)** 使用两个循环。 外循环从左到右拾取所有元素。 内部循环遍历选中元素右侧的所有元素,并更新`countSmaller[]`。 ## C ``` void constructLowerArray (int *arr[], int *countSmaller, int n) {   int i, j;   // initialize all the counts in countSmaller array as 0   for  (i = 0; i < n; i++)      countSmaller[i] = 0;   for (i = 0; i < n; i++)   {     for (j = i+1; j < n; j++)     {        if (arr[j] < arr[i])          countSmaller[i]++;     }   } } /* Utility function that prints out an array on a line */ void printArray(int arr[], int size) {   int i;   for (i=0; i < size; i++)     printf("%d ", arr[i]);   printf("\n"); } // Driver program to test above functions int main() {   int arr[] = {12, 10, 5, 4, 2, 20, 6, 1, 0, 2};   int n = sizeof(arr)/sizeof(arr[0]);   int *low = (int *)malloc(sizeof(int)*n);   constructLowerArray(arr, low, n);   printArray(low, n);   return 0; } ```