现在有一些长度相等的DNA串(只由ACGT四个字母组成),请将它们按照逆序对的数量多少排序。
逆序对指的是字符串A中的两个字符A[i]、A[j],具有i < j 且 A[i] > A[j] 的性质。如字符串”ATCG“中,T和C是一个逆序对,T和G是另一个逆序对,这个字符串的逆序对数为2。
第2至m+1行:每行是一个长度为n的字符串
#include<stdio.h>
intmain()
{
int n,m,i,j,k,min,max=0;
char data[101][51];
int flag[101]={0};
int len[101]={0};
scanf("%d%d",&n,&m);
for(i=0;i<m;i++){
scanf("%s",&data[i]);
for(j=0;j<n;j++)
for(k=j+1;k<n;k++)
if(data[i][j]>data[i][k])//向后比较如果出现逆序,+1;
len[i]++;
if(len[i]>max)//比较各串重数,并记录max
max=len[i];
}
for(i=0;i<m;i++)
{
min=max+1;
for(j=0;j<m;j++)
{if(len[j]<min&&flag[j]==0)//最大值附min。flag[j]用来去掉重复的比较
{
min=len[j];k=j;//把最大重数序号赋给k;
}
}
flag[k]=1;
printf("%s\n",data[k]);
}
return0;
}