POJ-1007 DNA Sorting

此题也是关于逆序数的,当然可以用归并排序的方法,但是我注意到服务器提供的数据量较小,最普通的方法应该都可以通过,所以就用了个逐个比较求逆序数的算法,然后再用直接插入排序把DNA按逆序数大小排列起来,最后输出。果真AC了,哈哈!

源码如下:
 1  char  a[ 101 ][ 51 ];
 2  typedef  struct  {
 3       int  seq;
 4       int  inv;
 5  }pair;
 6 
 7  pair t[ 101 ];
 8 
 9  int  main( void ) {
10       int  len, N, i, j, k, p;
11       int  slen, cnt;
12      pair temp;
13 
14       //  哨兵
15      t[ 0 ].seq  =   0 ;
16      t[ 0 ].inv  =   0 ;
17 
18      scanf( " %d " & len);
19      scanf( " %d " & N);
20 
21       for  (i = 1 ; i <= N; i ++ ) {
22          scanf( " %s " ,a[i]);
23                   //  求逆序数
24          cnt  =   0 ;
25           for  (j = len - 1 ; j >= 1 ; j -- ) {
26               for  (k = 0 ; k < j; k ++ ) {
27                   if  (a[i][k] > a[i][j]) cnt ++ ;
28              }
29          }
30          temp.seq  =  i;
31          temp.inv  =  cnt;
32 
33                   //  插入排序
34           for  (k = i - 1 ;k >= 0 && t[k].inv > temp.inv; k -- ) {
35              t[k + 1 =  t[k];
36          }
37          t[k + 1 =  temp;
38      }
39           //  打印结果
40       for  (p = 1 ; p <= N; p ++ ) {
41          printf( " %s\n " , a[t[p].seq]);
42      }
43 
44       return   0 ;
45  }
46 


你可能感兴趣的:(sort)