📄 归并排序.cpp
字号:
int n,inverse;
void mergesort(int a[],int b[],int len){
int i,j,k,t,left;
i=0;
t=0;
while(i+2*len<n){
left=len;
j=i;
k=i+len;
while(j<i+len&&k<i+2*len){
if(b[j]>b[k]){
inverse+=left;
a[t++]=b[k];
k++;
}
else{
a[t++]=b[j];
j++;
left-=1;
}
}
while(k<i+2*len){
a[t++]=b[k];
k++;
}
while(j<i+len){
a[t++]=b[j];
j++;
}
i+=2*len;
}
if(i+len<n){
j=i;
k=i+len;
left=len;
while(j<i+len&&k<n){
if(b[j]>b[k]){
inverse+=left;
a[t++]=b[k];
k++;
}
else{
a[t++]=b[j];
j++;
left-=1;
}
}
while(k<n){
a[t++]=b[k];
k++;
}
while(j<i+len){
a[t++]=b[j];
j++;
}
i+=2*len;
}
else{
while(i<n){
a[t++]=b[i];
i++;
}
}
return;
}
void merge(int a[]){
int temp[700];
int len=1;
while(len<n){
mergesort(temp,a,len); len*=2;
mergesort(a,temp,len); len*=2;
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -