/*__________________________________________________________POJ 1007题_________________________________________________________________ DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 45169 Accepted: 17618 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 ************************************************************************************************************************************/ #include<iostream> #include<string> #include<stdlib.h> using namespace std; typedef struct DNAstring{ string str; int unsortedness; }DNAstring; /* #include<fstream> fstream fin("input.txt",ios::in); #define cin fin //*/ void CountUnsortedness(struct DNAstring *m) { int i,j; for(i=0;i<m->str.length();i++) for(j=i+1;j<m->str.length();j++) { if(m->str[i]>m->str[j]) { m->unsortedness++; // cout<<m->unsortedness; } } } int cmp(const void*a,const void*b) { return (*(DNAstring *)a).unsortedness - (*(DNAstring *)b).unsortedness; } int main() { int i; int length,n; cin>>length>>n; struct DNAstring *inputStr=new struct DNAstring[n]; for(i=0;i<n;i++) { cin>>inputStr[i].str; inputStr[i].unsortedness=0; //cout<<inputStr[i].str<<" "<<inputStr[i].unsortedness<<endl; CountUnsortedness(&inputStr[i]); //cout<<inputStr[i].str<<" "<<inputStr[i].unsortedness<<endl<<endl; } qsort(inputStr,n,sizeof(struct DNAstring),cmp); for(i=0;i<n;i++) cout<<inputStr[i].str<<endl; return 0; } //总结:通过此题会用<stdlib.h>中的qsort()快排函数了