POJ 1007 DNA sorting(統計逆序對數+歸併排序)

來源:互聯網
上載者:User

//統計逆序對數,用歸併排序來統計 O(nlgn) 應該比枚舉要快,不過在這題中應該不會體現,反而浪費了空間,不過算了,當練歸併排序<br />#include<iostream><br />#include<algorithm><br />#define INF 2147483647<br />using namespace std;<br />struct str<br />{<br />char source[100];//儲存原始序列<br />char s[100];<br />int misorder;<br />}DNA[101];<br />int len,n,_min,flag,cnt;//逆序對數<br />char T[100];<br />int merge_sort(char A[],int x,int y,char T[])//歸併排序<br />{<br />if(y-x > 1)<br />{<br />int m = (x+y) / 2;<br />int p = x,q = m,i = x;<br />merge_sort(A,x,m,T);<br />merge_sort(A,m,y,T);<br />while(p < m || q < y)<br />{<br />if(q >= y || (p < m && A[p] <= A[q]))<br />T[i++] = A[p++];<br />else<br />{<br />T[i++] = A[q++];<br />cnt += m - p;//統計逆序對數<br />}<br />}<br />for(i = x;i < y;++i)<br />A[i] = T[i];<br />}<br />return cnt;//返回逆序對數<br />}<br />int main()<br />{<br />//freopen("in.txt","r",stdin);<br />scanf("%d%d",&len,&n);</p><p>for(int i = 0;i < n;++i)<br />{<br />scanf("%s",DNA[i].s);<br />strcpy(DNA[i].source,DNA[i].s);<br />cnt = 0;<br />DNA[i].misorder = merge_sort(DNA[i].s,0,len,T);<br />}<br />//一開始我用qsort的結構體排序,以為很方便,結果WA,原因是qsort是不穩定的,當逆序數對相同時,它不能保證結構體中的其他內容仍然按照原始順序排列<br />//結果無奈就用了個最腦殘的O(n^2)排序……<br />for(int j = 0;j < n;++j)<br />{<br />_min = INF;<br />for(int i = 0;i < n;++i)<br />{<br />if(DNA[i].misorder < _min)<br />{<br />_min = DNA[i].misorder;<br />flag = i;<br />}<br />}<br />printf("%s/n",DNA[flag].source);<br />DNA[flag].misorder = INF;<br />}<br />return 0;<br />} 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.