复杂度:O(nlogn)
一种稳定的排序算法,分治思想
#include<bits/stdc++.h> using namespace std; int a[500],t[500]; void merge(int l,int r){ if(l == r) return; int mid = (l+r)/2; merge(l,mid); merge(mid+1,r); int i = l,j = mid+1,k = l; while(i<=mid&&j<=r){ if(a[i] <= a[j]){ t[k++] = a[i++]; }else{ t[k++] = a[j++]; } } while(i<=mid) t[k++] = a[i++]; while(j<=r) t[k++] = a[j++]; for(int i=l;i<=r; i++){ a[i] = t[i]; } } int main(){ int n; cin >> n; for(int i=1; i<=n; i++){ cin >> a[i]; } merge(1,n); for(int i=1; i<=n; i++){ cout << a[i] << " "; } return 0; }
求逆序对:洛谷P1908