版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ShellDawn/article/details/88881260
shell排序变体
#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
int solve(vector<int>& data,int l,int r){
if(l>=r-1) return 0;
int mid = (l+r+1)/2;
int ans1 = solve(data,l,mid);
int ans2 = solve(data,mid,r);
int i = l;
int j = mid;
int ans = ans1 + ans2;
while(i<mid&&j<r){
if(data[i] > data[j]){
ans = (ans + (r-j))%mod;
i++;
}else{
j++;
}
}
sort(data.begin()+l,data.begin()+r,greater<int>());
return ans;
}
int InversePairs(vector<int> data) {
int l = data.size();
return solve(data,0,l);
}
int main(){
int a[] = {1,2,3,4,5,6,7,0};
vector<int> v(a,a+8);
printf("%d\n",InversePairs(v));
return 0;
}