DNA排序 C 實現

2021-10-25 00:18:36 字數 1366 閱讀 4992

乙個序列的逆序數定義為序列中無序元素對的數目。例如,在字串行daabec中,逆序數為5,因為字元d比它右邊的4個字元大,而字元e比它右邊的1個字元大。字串行aacedgg只有1個逆序,即e和d,它幾乎是已經排好序的,而字串行「zwqm」有6個逆序,它是最大程度的無序,即有序序列的逆序。

在本題中,你的任務是對dna字串(只包含字元「a」、「c」,「g」和「t」)進行排序。注意不是按照字母順序,而是按照逆序數從低到高進行排序,所有字串的長度都一樣。

輸入檔案中包含多組測試資料。每組測試資料的格式為:第1行為2個整數,正整數n(0 < n <= 50,表示字串的長度)和正整數m(1 < m <= 100,表示字串的數目);然後是m行,每一行為乙個字串,長度為n。

對應到輸入檔案中的n組測試資料,輸出也有n組,每2組輸出之間有乙個空行。對每組輸入資料,按逆序數從低到高輸出各字串,如果2個字串的逆序數一行,則按輸入時的先後順序輸出。

10 5

ttttggccaa

tttggccaaa

gatcagattt

cccgggggga

atcgatgcat

cccgggggga

gatcagattt

atcgatgcat

ttttggccaa

tttggccaaa

思路:

首先構造結構體,結構體裡面有①儲存字串的陣列,②求解字串逆序數的函式,③求字串長度的函式(求逆序數的函式要用到字串長度)。

通過每個字串的逆序數對結構體陣列的排序,用到qsort()函式。(自定義cmp比較函式)

qsort(陣列首位址,陣列長度,陣列元素位元組大小,指向比較函式的指標)

#include

using

namespace std;

struct charlist

return pos -1;

}//求解字串逆序數的函式

intantinum()

}}return result;}}

;//自定義比較函式

intcmp

(const

void

*a,const

void

*b)//定義結構體陣列

charlist dna[20]

;int

main()

qsort

(dna, n,

sizeof

(dna[0]

), cmp)

;for

(int i =

0; i < m; i++

)return0;

}

C語言描述 DNA

小強從小就喜歡生命科學,他總是好奇花草鳥獸從 來的。終於,小強上中學了,接觸到了神聖的名詞 dna.它有乙個雙螺旋的結構。這讓一根筋的小強抓破頭皮,要是能畫出來就好了 小強喊道。現在就請你幫助他吧 輸入包含多組測試資料。第乙個整數n n 15 n表示組數,每組資料報含兩個整數a,b。a表示乙個單位的...

百練1007 DNA排序

總時間限制 1000ms 記憶體限制 65536kb 描述 現在有一些長度相等的dna串 只由acgt四個字母組成 請將它們按照逆序對的數量多少排序。逆序對指的是字串a中的兩個字元a i a j 具有i j 且 a i a j 的性質。如字串 atcg 中,t和c是乙個逆序對,t和g是另乙個逆序對,...

排序 C 實現

快速排序 兩個哨兵i和j,i從左往右找大於key的值,j從右往左找小於key的值,找到之後交換。迴圈之後還有一次交換 void quicksort vector a,int left,int right swap a,j,left quicksort a,left,j 1 quicksort a,j...