【演算法】歸併–C語言實現歸併排序遞迴演算法

來源:互聯網
上載者:User
#include <stdio.h>#define M  5void MergeSort(int r[],int r1[],int r2[],int s,int t);void Merge(int r[],int r1[],int s,int m,int t);int main(){ int i; int r[M]; int r1[M]; int r2[M]; for(i = 0; i < M; i ++) {  scanf("%d",&r[i]); }    MergeSort(r,r1,r2,0,M-1); for(i = 0; i < M; i ++) {  printf("%d/n",r1[i]); } return 0;}void MergeSort(int r[],int r1[],int r2[],int s,int t){ if(s == t) {  r1[s] = r[s]; } else {  int m;  m = (s + t)/2;  MergeSort(r, r2, r1, s, m);        //歸併排序前半個子序列          MergeSort(r, r2, r1, m+1, t);      //歸併排序後半個子序列        Merge(r2, r1, s, m, t);             //將兩個已排序的子序列歸併   }}void Merge(int r[],int r1[],int s,int m,int t){ int i; int j; int k; i = s; j = m + 1; k = s; while(i <= m && j <= t) {  if(r[i] <= r[j])  {   r1[k] = r[i];   k++;   i++;    }  else  {   r1[k] = r[j];            k++;   j++;    } } if(i <= m) {  while(i <= m)  {   r1[k] = r[i];   k++;   i++;  } } else {  while(j <= t)  {   r1[k] = r[j];   k++;   j++;     } } }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.