http://acm.pku.edu.cn/JudgeOnline/problem?id=1007

Код:
#include <stdio.h>

int unsorted(char *str, int len)
{
    int i,j;
    int n=0;

    for(i=0;i<len-1;i++) {
        for(j=i+1;str[j];j++) {
            if(str[i] > str[j]) n++;
        }
    }

    return n;
}

void insert(int a[], int b[], int s, int n)
{
    int i,j;

    for(i=0;i<n;i++)
        if(a[i] > s) break;

    for(j=n;j>i;j--) {
        a[j] = a[j-1];
        b[j] = b[j-1];
    }

    a[i] = s;
    b[i] = n;
}

int main()
{
    int n,m;
    char DNA[100][51];
    int tmp1[100];
    int tmp2[100];
    int i, s;

    scanf("%d %d", &n, &m);

    for(i=0;i<m;i++) {
        scanf("%s", DNA[i]);

        s = unsorted(DNA[i], n);
        insert(tmp1, tmp2, s, i);
    }

    for(i=0;i<m;i++) {
        printf("%s\n", DNA[tmp2[i]]);
    }

    return 0;
}