Wingy

早起的鸟儿有虫吃,早起的虫儿被鸟吃。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

求逆序数的归并算法

Posted on 2006-12-07 23:45  Wingy  阅读(950)  评论(0编辑  收藏  举报
时间复杂度应该是Nlog2N,有空研究研究.
#include<stdio.h>

int inv(int n,char a[]){
    
int l=n>>1,r=n-l,i,j;
    
char *v=(char*)malloc(n);
    
int ret=(r>1?(inv(l,a)+inv(r,a+l)):0);
    
for(i=j=0;i<=l;v[i+j]=a[i],i++)
    
for(ret+=j;j<r&&(i==l||a[i]>a[l+j]);v[i+j]=a[l+j],j++);
    memcpy(a,v,n);
    
return ret;
}


int main(){
    
char a[]="abcdef";
    printf(
"%d\n",inv(strlen(a),a));
}