归并排序模板
void guiBing(int[] nums, int left, int right) {
if(left >= right) {return ;}
int mid = (left + right) / 2;
guiBing(nums, left, mid);
guiBing(nums, mid + 1, right);
merge(nums, left, mid, right);
}
void merge(int[] nums, int left, int mid, int right) {
int i = left, j = mid + 1, index = 0;
int[] tmp = new int[right - left + 1];
while(i <= mid && j <= right) {
if(nums[i] <= nums[j]) {
tmp[index++] = nums[i++];
} else {
count += mid - i + 1;
tmp[index++] = nums[j++];
}
}
while(i <= mid) {
tmp[index++] = nums[i++];
}
while(j <= right) {
tmp[index++] = nums[j++];
}
index = 0;
for(int k = left; k <= right; ++k) {
nums[k] = tmp[index++];
}
}