您的位置:首页 > 理论基础 > 计算机网络

http://poj.org/problem?id=1007

2012-02-19 12:48 281 查看
归并排序。。。。

AC代码:

#include<iostream>
#include<string.h>
#include<string>
#include<algorithm>
#define N 60
using namespace std;
char a[101]
,b
;
struct str{ int value;
int id;
}c[101];
bool cmp(str x,str y)
{return x.value<y.value;}
long num;
void merge(char a[],int p,int q,int r,int s)
{ int a1=p,k=p,c=r;
while(a1<=q&&c<=s)
{ if(a[a1]<=a[c]) b[k++]=a[a1++];
else{b[k++]=a[c++];num+=q-a1+1;}
}
if(a1>q)
for(;c<=s;++c)
b[k++]=a[c];
if(c>s)
for(;a1<=q;++a1)
b[k++]=a[a1];
for(;p<k;++p)
a[p]=b[p];
}
void merge_sort(char a[],int p,int r)
{ if(p<r)
{ int q=(p+r)/2;
merge_sort(a,p,q);
merge_sort(a,q+1,r);
merge(a,p,q,q+1,r);
}
}
int main()
{ int n,m;
cin>>n>>m;
for(int i=0;i<m;++i)
{ num=0;
for(int j=0;j<n;++j)
cin>>a[i][j];
char aa[50];
strcpy(aa,a[i]);
merge_sort(aa,0,n-1);
c[i].value=num;
c[i].id=i;
}
sort(c,c+m,cmp);
for(int i=0;i<m;++i)
cout<<a[c[i].id]<<endl;
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  merge c struct im