Problem Description
One measure of ``unsortedness'' in a sequence is the number of pairs of entries that are out of order with respect to each other. For instance, in the letter sequence ``DAABEC'', this measure is 5, since D is greater than four letters to its right and E is greater than one letter to its right. This measure is called the number of inversions in the sequence. The sequence ``AACEDGG'' has only one inversion (E and D)---it is nearly sorted---while the sequence ``ZWQM'' has 6 inversions (it is as unsorted as can be---exactly the reverse of sorted).
You are responsible for cataloguing a sequence of DNA strings (sequences containing only the four letters A, C, G, and T). However, you want to catalog them, not in alphabetical order, but rather in order of ``sortedness'', from ``most sorted'' to ``least sorted''. All the strings are of the same length.
Input
The first line contains two integers: a positive integer n (0 < n <= 50) giving the length of the strings; and a positive integer m (0 < m <= 100) giving the number of strings. These are followed by m lines, each containing a string of length n.
Output
Output the list of input strings, arranged from ``most sorted'' to ``least sorted''. Since two strings can be equally sorted, then output them according to the orginal order.
Sample Input
10 6 AACATGAAGG TTTTGGCCAA TTTGGCCAAA GATCAGATTT CCCGGGGGGA ATCGATGCAT
Sample Output
CCCGGGGGGA AACATGAAGG GATCAGATTT ATCGATGCAT TTTTGGCCAA TTTGGCCAAA
Source
PKU
#include "stdio.h"
#include "string.h"
struct str {
char a[1000];
int cnt;
};
int main() {
int n, m;
struct str s[100];
scanf("%d %d", &n, &m);
int i, j ,k;
for (i = 0; i < m; i++) {
scanf("%s", s[i].a);
s[i].cnt = 0;
for (j = 0; j < n - 1; j++) {
for (k = j + 1; k < n; k++) {
if (s[i].a[j] > s[i].a[k]) {
s[i].cnt++;
}
}
}
}
struct str temp;
for (i = 0; i < m - 1; i++) {
for (j = i + 1; j < m; j++) {
if (s[i].cnt > s[j].cnt) {
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
}
for (i = 0; i < m; i++) {
printf("%s\n", s[i].a);
}
return 0;
}
10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT
CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA
--------------------------------
Process exited after 1 seconds with return value 0
请按任意键继续. . .
题意:将字符串的逆序数进行排序
算法:用结构体数组存字符串和他的逆序数
在交换的时候记得字符串和他的逆序数是一个整体,别只把字符串交换了而没管逆序数(坑死我了😂)