poj 1007 DNA Sorting(排序--快排)

简介:
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 67603   Accepted: 26858

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

 

复制代码
#include <iostream>
#include <algorithm>
using namespace std;

typedef struct
{
    string dna;
    int count;
}DNA;
DNA dna[101];
int cmp(const void *a,const void *b)
{
    DNA *aa = (DNA *)a;
    DNA *bb = (DNA *)b;
    return aa->count-bb->count;
}
int main()
{
    int n,m;
    char c;
    cin>>n>>m;
    for(int i = 0; i < m; i++)
    {
        cin>>dna[i].dna;
        dna[i].count = 0;
        for(int j = 0; j < n; j++)
        for(int k = j+1; k < n; k++)
        {
            if(dna[i].dna[j]>dna[i].dna[k])
            dna[i].count++;
        }
    }
    qsort(dna,m,sizeof(dna[0]),cmp);
    for(int i = 0; i < m; i++)
    cout<<dna[i].dna<<endl;
    return 0;
}
复制代码
本文转自NewPanderKing51CTO博客,原文链接: http://www.cnblogs.com/newpanderking/archive/2012/09/26/2704584.html  ,如需转载请自行联系原作者
相关文章
|
算法 搜索推荐
经典算法之折半插入排序(Binary Insertion Sort)
经典算法之折半插入排序(Binary Insertion Sort)
321 0
|
人工智能
POJ 2299 Ultra-QuickSort(树状数组+离散化+求逆序数)
POJ 2299 Ultra-QuickSort(树状数组+离散化+求逆序数)
|
缓存 搜索推荐 算法
图解插入排序——直接插入排序算法(straight insertion sort)
图解插入排序——直接插入排序算法(straight insertion sort)
304 0
图解插入排序——直接插入排序算法(straight insertion sort)
|
机器学习/深度学习 搜索推荐 算法
图解快排——快速排序算法(quick sort)
图解快排——快速排序算法(quick sort)
228 0
图解快排——快速排序算法(quick sort)
|
机器学习/深度学习 Windows
The 2022 ICPC Asia Regionals Online Contest (I)-D题题解(DFS暴搜+剪枝+打表去重+二分)
时间复杂度:O(227 + nlog(n) + T * log(n)),227是DFS打表的时间,nlog(n)是vertor排序的时间,T*log(n)是询问次数和二分搜答案的时间。(如果算错了,评论或者私信指出谢谢)
170 0
The 2022 ICPC Asia Regionals Online Contest (I)-D题题解(DFS暴搜+剪枝+打表去重+二分)
|
算法
经典算法之归并排序(Merge Sort)
经典算法之归并排序(Merge Sort)
156 0
经典算法之归并排序(Merge Sort)
|
机器学习/深度学习 人工智能 算法
CF1446D Frequency Problem(思维 前缀和 根号分治 双指针)
CF1446D Frequency Problem(思维 前缀和 根号分治 双指针)
93 0
|
测试技术
HDU-1106,排序(sort)
HDU-1106,排序(sort)
|
存储 测试技术
HDOJ(HDU) 2523 SORT AGAIN(推导排序、、)
HDOJ(HDU) 2523 SORT AGAIN(推导排序、、)
102 0
|
人工智能 BI iOS开发
codeforces1140C Playlist(排序+优先队列)
codeforces1140C题解(排序+优先队列)
1153 0