歸併排序應用之小和問題

2021-08-20 14:07:48 字數 733 閱讀 4616

小和問題:

q1、什麼是小和?

a:在乙個數列中,任意元素p左邊所有比p小的數之和,即為小和。

q2:什麼是小和問題?

a: 數列中所有元素的小和之和就是小和問題

利用歸併排序求解

思想:從第乙個元素p起向後看,如果有n個元素都比p大,說明n個元素的小和中都有p,因此,第乙個元素對小和的貢獻是n*p,遍歷完整個陣列後,就可以求出全部小和了。

給出了暴力求解法和歸併求解法,二者結果相同。

#includeusing namespace std;

#define n 12

void arraycopy(int *a, int *b, int length)

} return sum;

}int merge(int *a,int left,int middle,int right)

else

buf[k++] = a[j++]; }

while(i<=middle)

while(j<=right)

for(int m=0,n=left;m>1);

return mergesort(a,left,middle) + mergesort(a,middle+1,right)+merge(a,left,middle,right); }

int main()

; cout

}

歸併排序 小和問題

public class mergesort sortprocess arr,0,arr.length 1 遞迴 public static void sortprocess int arr,int l,int r int mid l r l 1 sortprocess arr,l,mid t n ...

歸併排序 小和問題

問題描述 在乙個陣列中,每乙個數左邊比當前數小的數累加起來,叫做這個陣列的小和。求乙個陣列的小和。樣例 1,3,4,2,5 1左邊比1小的數,沒有 3左邊比3小的數,1 4左邊比4小的數,1 3 2左邊比2小的數,1 5左邊比5小的數,1 3 4 2 所以小和為1 1 3 1 1 3 4 2 16 ...

小和問題 歸併排序

在乙個陣列中,每乙個數左邊比當前數小的數累加起來,叫做這個陣列的小和。例子 輸入 1,3,4,2,5 輸出 16 1左邊比1小的數,沒有 3左邊比3小的數,1 4左邊比4小的數,1 3 2左邊比2小的數,1 5左邊比5小的數,1 3 4 2 所以小和為1 1 3 1 1 3 4 2 16實現的基本原...