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 6AACATGAAGGTTTTGGCCAATTTGGCCAAAGATCAGATTTCCCGGGGGGAATCGATGCAT
Sample Output
CCCGGGGGGAAACATGAAGGGATCAGATTTATCGATGCATTTTTGGCCAATTTGGCCAAA
簡單的排序
import java.io.BufferedInputStream;import java.util.Scanner;import java.util.TreeSet;public class POJ1007 {static Scanner s = new Scanner(new BufferedInputStream(System.in));public static void main(String[] args) {int n = s.nextInt();int m = s.nextInt();TreeSet<Str> set = new TreeSet<Str>();int index = 0;for(int i=0; i<m; i++)set.add(new Str(s.next(),index++));for(Str str:set)System.out.println(str.str);}}class Str implements Comparable<Str>{public Str(String str, int index) {this.str = str;this.index = index;}String str;int index;public int getMeasure(){char arr[] = str.toCharArray();int len = arr.length;int sum = 0;for(int i=0; i<len-1; i++){for(int j=i; j<len; j++){if(arr[i] > arr[j])sum++;}}return sum;}public int compareTo(Str o) {if(this.getMeasure() > o.getMeasure())return 1;else if(this.getMeasure() < o.getMeasure())return -1;else{return this.index - o.index;}}}
第二種方法:
import java.util.*; class DNA { private String str = null; private int sortNum = 0; public DNA(String input) { str = input; int num = 0; for(int i = 0; i < str.length()-1; i++) { for(int j = i+1; j < str.length(); j++) if(str.charAt(i) > str.charAt(j)) num++; } sortNum = num; } public int getSortNum() { return sortNum; } public String toString() { return str; } } class DNAComparator implements Comparator { public int compare(Object o1, Object o2) { DNA d1 = (DNA)o1; DNA d2 = (DNA)o2; if(d1.getSortNum() > d2.getSortNum()) return 1; else if(d1.getSortNum() == d2.getSortNum()) return 0; else return -1; } } public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); String[] str = cin.nextLine().split(" "); int col = Integer.valueOf(str[0]).intValue(); int row = Integer.valueOf(str[1]).intValue(); List list = new ArrayList(); for(int i = 0; i < row; i++) { DNA dna = new DNA(cin.nextLine()); list.add(dna); } Collections.sort(list, new DNAComparator()); print(list); } private static void print(List list) { Iterator iter = list.iterator(); while(iter.hasNext()) { System.out.println(iter.next()); } } }