#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<map>
#include<unordered_set>
#include<unordered_map>
#include<algorithm>
#include<xfunctional>
using namespace std;
int Merge_sort(vector<int>& arr,int start,int mid,int end){
vector<int> left(arr.begin()+start,arr.begin()+mid+1);
vector<int> right(arr.begin()+mid+1,arr.begin()+end+1);
int index = start;
int count = 0;
int i = 0, j = 0;
while (i < left.size() && j < right.size()){
if (left[i] >= right[j]){
count += (left.size()-i);
arr[index] = right[j];
j++;
index++;
}else{
arr[index] = left[i];
i++;
index++;
}
}
while (i < left.size()){
arr[index] = left[i];
i++;
index++;
}
while (j < right.size()){
arr[index] = right[j];
j++;
index++;
}
return count;
}
int Merge_count(vector<int>& arr,int start,int end){
if (start >= end) return 0;
int mid = (start+end) / 2;
int left = Merge_count(arr,start,mid);
int right = Merge_count(arr,mid+1,end);
int cur = Merge_sort(arr,start,mid,end);
return left + cur + right;
}
int main(){
int n;
cout << "Input the size(>=1) of the array:";
cin >> n;
vector<int> arr(n,0);
cout << "Input the array element:";
for (int i = 0; i < n; i++) cin >> arr[i];
cout <<"The number of reverse order:";
int sum = Merge_count(arr,0,arr.size()-1);
cout <<sum<< endl;
system("pause");
return 0;
}
算法导论(Exercise 2-4)
最新推荐文章于 2022-09-26 08:24:38 发布