POJ-1007: DNA Sorting 详解1: 插入排序法

> 分析

>> 本题分两步

1. 计算序列的逆序数

2. 根据逆序数排序

>> 由于序列个数最大只有100个, 所以不需要过分追求速度,插入排序就够用

> 注意:

>> 存储序列的数组长度最好是50+1, 有利于输出

> 附代码

 1 #include "stdio.h"
 2
 3 int main(void)
 4 {
 5     char seqs[100][50 + 1] = {0} ;
 6     int inversions[100] = {0} ;
 7     int sortSeqs[100] = {0} ;
 8     int tmp = 0 ;
 9     int seqNum = 0 ;
10     int seqLen = 0 ;
11     int i = 0, j = 0, k = 0 ;
12     int min = 0 ;
13
14     scanf("%d %d", &seqLen, &seqNum) ;
15
16     for(i = 0; i < seqNum; i++)
17     {
18         scanf("%s", seqs[i]) ;
19
20         for(j = 0; j < seqLen; j++)
21             for(k = j + 1; k < seqLen; k++)
22             {
23                 if(seqs[i][k] < seqs[i][j])
24                     inversions[i]++ ;
25             }
26
27         sortSeqs[i] = i ;
28     }
29
30     /* 插入排序 */
31     for(i = 0; i < seqNum; i++)
32     {
33         min = i ;
34         for(j = i + 1; j < seqNum; j++)
35         {
36             if(inversions[sortSeqs[j]] < inversions[sortSeqs[min]])
37                 min = j ;
38         }
39
40         tmp = sortSeqs[i] ;
41         sortSeqs[i] = sortSeqs[min] ;
42         sortSeqs[min] = tmp ;
43     }
44
45     for(i = 0; i < seqNum; i++)
46         printf("%s\r\n", seqs[sortSeqs[i]]) ;
47
48     return 0 ;
49 }
时间: 2024-10-10 13:03:59

POJ-1007: DNA Sorting 详解1: 插入排序法的相关文章

poj 1007 DNA Sorting (求逆序数)

DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 83069   Accepted: 33428 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 instanc

POJ 1007 DNA Sorting (归并排序)

题意: 输入m个长度为n的DNA序列,把他们按照逆序数从小到大稳定排序输出. PS:"稳定排序"就是当序列中出现A1==A2时,排序前后A1与A2的相对位置不发生改变. 思路:裸归并排序了  不懂得可以参考下http://blog.csdn.net/morewindows/article/details/6678165/  但是他的代码写错了!后来我按照理解自己写了一个,测了一下是对的! AC代码: #include<cstdio> #include<cstring&

POJ 1007 DNA Sorting

按逆序数从小到大排序.需要稳定排序.然而依然可以快排 #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const int N = 55; const int M = 104; char str[M][N]; struct point{ int num, id; }p[M]; int n, m; void GetInverse(int id){ int i; in

POJ 1007:DNA排序

AC CODE: 1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 Scanner input = new Scanner(System.in); 7 8 // 得到数据 9 int n = input.nextInt(); 10 int m = input.nextInt(); 11 String temp = input.nextLine();

详解直接插入排序

直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止. 第一种程序: void InsertSort1(int arr[] , int n) { for(int i=1;i<n;i++)//循环从第二个数组元素开始,因为arr[0]作为最初已排序部分 { int temp=arr[i];//temp标记为未排序第一个元素 int j=i-1; while (j>=0 &&

POJ-1002: 487-3279 详解1: 堆排序法

> 分析 >> 本题的难点在于排序速度上 >> 排序算法要考虑重复项很多,无重复项两种情况 >> 当然由于本题对内存占用的要求不高,也可以不使用排序 > 总体思路 >> 先将电话号码按输入的顺序存下来 >> 对所有号码使用堆排序 >> 排序后根据号码连续出现的频率输出频率大于1的号码 > 输入转换 >> 本题中已详细定义了字母到数字的映射,因此推荐使用映射表较快 > 存储形式 >> 由于

HDU 5122 K.Bro Sorting(模拟——思维题详解)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5122 Problem Description Matt's friend K.Bro is an ACMer. Yesterday, K.Bro learnt an algorithm: Bubble sort. Bubble sort will compare each pair of adjacent items and swap them if they are in the wrong o

POJ 1659 Frogs&#39; Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】

Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9897   Accepted: 4137   Special Judge Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居.现在已知每只青蛙的邻居数目x1, x2, ..

poj 1611(详解)

The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 22217   Accepted: 10805 Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. T