每天一道算法_8_DNA Sorting

DescriptionOne 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 mea

大家好,又见面了,我是全栈君。

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

 

代码如下:

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.util.Arrays;
import java.util.Comparator;

//import java.util.Scanner;   
class DNA {
	String value;
	int level;
}

class DNAType implements Comparator<Object> {
	public int compare(Object arg0, Object arg1) {
		DNA obj1 = (DNA) arg0;
		DNA obj2 = (DNA) arg1;
		return obj1.level - obj2.level;
	}
}

public class DNASorting {
	public static void main(String[] args) throws Exception {
		int i;
		// Scanner cin = new Scanner(System.in);
		DataInputStream cin = new DataInputStream(new BufferedInputStream(
				System.in));
		// int col = cin.nextInt();
		// int row = cin.nextInt();
		// cin.nextLine();
		String s = new String();
		s = cin.readLine();
		String n[] = s.split(" ");
		int col = Integer.parseInt(n[0]);
		int row = Integer.parseInt(n[1]);
		DNA dna[] = new DNA[row];
		for (i = 0; i < row; ++i) {
			String line = new String();
			// line = cin.nextLine();
			line = cin.readLine();
			dna[i] = new DNA();
			dna[i].value = line;
			dna[i].level = getLevel(line);
		}
		DNAType comp = new DNAType();
		Arrays.sort(dna, comp);
		for (i = 0; i < row; ++i) {
			System.out.println(dna[i].value);
		}
	}

	private static int getLevel(String line) {
		int i, j, t = 0;
		for (i = 0; i < line.length(); ++i) {
			for (j = i + 1; j < line.length(); ++j) {
				if (line.charAt(i) > line.charAt(j)) {
					++t;
				}
			}
		}
		return t;
	}
}

 

作者:jason0539

微博:http://weibo.com/2553717707

博客:http://blog.csdn.net/jason0539(转载请说明出处)

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121381.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号