給定兩個等長陣列 num[] 與 cou[],計算有多少個配對 (i, j) 使得 num[j] > cou[i]。本質上是計算兩陣列所有元素兩兩比較中,第一個陣列元素大於第二個陣列元素的次數。
陣列 num[] = {1, 3, 5, 7, 9},cou[] = {2, 3, 4, 7, 8}。
雙重迴圈比較所有 5×5=25 種配對,計算滿足 num[j] > cou[i] 的總數。
#include <stdio.h>
int main()
{
int i, j, count = 0;
int num[] = {1, 3, 5, 7, 9};
int cou[] = {2, 3, 4, 7, 8};
for(i = 0; i < 5; i++)
{
for(j = 0; j < 5; j++)
{
if(num[j] > cou[i]) count++;
}
}
printf("陣列num[]比陣列cou[]大的數有%d個\n", count);
return 0;
}
| cou[i] | num[] 中較大的元素 | 個數 |
|---|---|---|
| 2 | 3,5,7,9 | 4 |
| 3 | 5,7,9 | 3 |
| 4 | 5,7,9 | 3 |
| 7 | 9 | 1 |
| 8 | 9 | 1 |
| 總計 | 12 |
程式輸出應為 12。
若陣列較大,可先將兩陣列排序,再用雙指針單次遍歷計數:
sort(num); sort(cou);
int i = 0, j = 0, count = 0;
while(i < 5 && j < 5) {
if(num[j] > cou[i]) { count += 5 - j; i++; }
else j++;
}
時間從 O(n²) 降為 O(n log n)。