归并排序求逆序数模板

来源:互联网 发布:网站用php与asp哪个好 编辑:程序博客网 时间:2024/05/18 11:27
<pre name="code" class="cpp">#include <stdio.h>#define N 1500int num;void merge(int l, int r, int *a, int *b);int main(){int a[N], b[N];int n, i;while( scanf("%d", &n) != -1 ){num = 0;for(i=0; i<n; i++)scanf("%d", &a[i]);merge(0, n, a, b);for(i=0; i<n; i++)printf("%d ", a[i]);printf("\n%d\n", num);}return 0;}void merge(int l, int r, int *a, int *b){int i;int m, p, q;if( r-l > 1 ){m = (r+l)/2;merge(l, m, a, b);merge(m, r, a, b);p = l, q = m, i = l;while( p<m || q<r){if( p>=m || (q<r && a[q]<a[p]) ){b[i++] = a[q++];num += m-p;//右边进入b[]时 减去 左边还剩下的元素个数}else{b[i++] = a[p++];}}for( i=l; i<r; i++ )a[i] = b[i];}}


                                             
0 0