题意很明确,按无序度将字符串排序
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#define N 60
#define M 110
using namespace std;
typedef struct info
{
char str[N];
int du;
}info; //用结构体将字符串与无序度存储
info f[M];
int n,m;
void wuxudu (info* l, int m, int n) //将无序度求出并储存
{
int sum=0; //计数器
for (int i=1; i<=m; i++)
{
for (int j=0; j<n; j++)
for (int k=j+1; k<n; k++)
{
if (l[i].str[j] > l[i].str[k])
sum++;
}
l[i].du=sum;
sum=0; //计数器归零,重新计数
}
}
int cmp(const void *a, const void *b) //按升序排序
{
return (*(info*)a).du > (*(info*)b).du ? 1:-1;
}
void Initl (info* l,int n, int m) //结构体赋值输入函数
{
char ch;
for (int i=1; i<=m; i++)
{
scanf("%s",&l[i].str);
}
}
int main ()
{
cin>>n>>m;
Initl(f,n,m);
wuxudu(f,m,n);
qsort(f,m+1,sizeof(f[0]),cmp); //结构题排序
printf("\n");
for (int i=1; i<=m; i++)
{
for (int j=0; j<n; j++)
printf("%c",f[i].str[j]); //输出排序结果
cout<<endl;
}
return 0;
}
运行结果如下