【算法】归并--C语言实现归并排序递归算法

来源:互联网 发布:天猫美工培训 编辑:程序博客网 时间:2024/06/10 20:56
#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++;     } } }


 

原创粉丝点击