【算法】归并--实现归并排序非递归算法

来源:互联网 发布:天猫美工培训 编辑:程序博客网 时间:2024/06/11 00:10

 

#include <stdio.h>#define M 5void Merge(int r[],int r1,int s,int m,int t);void MergePass(int r[],int r1[],int n,int h);void MergeSort2(int r[],int r1[],int n);int main(){ int i; int r[M]; int r1[M]; for(i = 0; i < M; i ++) {  scanf("%d",&r[i]); } MergeSort2(r,r1,M-1); for(i = 0; i < M; i ++) {  printf("%d/n",r[i]); } return 0;}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 ++;  } }}void MergePass(int r[],int r1[],int n,int h){ int i; int k; i = 0; while(i <= n - 2*h + 1) {  Merge(r,r1,i,i + h - 1,i + 2*h - 1);  i += 2*h; } if(i < n - h + 1) {  Merge(r,r1,i,i + h - 1,n); } else {  for(k = i; k <= n; k ++)  {           r1[k] = r[k];  } }}void MergeSort2(int r[],int r1[],int n){ int h = 1; while(h <= n) {  MergePass(r,r1,n,h);  h = 2 * h;  MergePass(r1,r,n,h);  h = 2 * h; }}


 

原创粉丝点击