题意:未排序程度指的是序列中逆序对的个数。例如:DAABEC是5,因为D比它右边的四个字母大并且E比它右边的一个字母大。你的任务是为DNA串排序,按照从排序程度最好的到排序程度最差的规则。
思路:对于每个串,遍历并统计它的未排序程度,记录在专门的数组中,并设置标志数组与之对应,以确定哪个串已被输出,之后从未输出的串中找乱序度最小的输出之。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int cmp(const void *, const void *);
int n,m;
scanf("%d%d",&n,&m);
char a[105][55];
int c[105] = {0};
int max = 32767;
for(int i=0;i<m;i++)
{
scanf("%s",&a[i]);
int length = strlen(a[i]);
for(int j=0;j<length-1;j++)
for(int k=j+1;k<length;k++)
if(a[i][j]>a[i][k]) c[i]++;
}
int flag [105] = {0};
for(int i=0;i<m;i++)
{
int min = 32767;
int p;
for(int j=0;j<m;j++)
{
if(c[j]<min&&0==flag[j])
{
min = c[j];
p = j;
}
}
printf("%s\n",a[p]);
flag[p] = 1;
}
system("pause");
return 0;
}