时间复杂度应该是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));
}
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));
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步