码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序

时间:2018-04-26 21:16:47      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:归并排序

#include <stdio.h> #include <stdlib.h> void Merge(int a[],int p,int q,int r){     int i,j,k,n1,n2;     int * front,* back;          n1=q-p+1;    //前一部分长度     n2=r-q;     //后一部分长度     front = (int *)malloc(n1*sizeof(int));    //申请两个空间来存放拍好的数组     back = (int *)malloc(n2*sizeof(int));     for(i = 0;i<n1;i++){         front[i] = a[p+i];     }     for(i = 0;i<n2;i++){         back[i] = a[q+i+1];     }     //将元素合并     i=0;     j=0;     k=p;     while(i<n1&&j<n2){         if(front[i]<back[j]){             a[k++] = front[i++];         }         else{             a[k++] = back[j++];         }     }     //将剩余元素合并     while(i<n1){         a[k++] = front[i++];     }     while(j<n2){         a[k++] = back[j++];     } } void MergeSort(int a[],int p,int r){     int q;     if(p<r){         q=(p+r)/2;          //将数组分解         MergeSort(a,p,q);   //将前面一部分用递归的方法排序         MergeSort(a,q+1,r); //将后面一部分用递归的方法排序         Merge(a,p,q,r);     //将两个部分合并     } } int main(){     int *a,n,i;     printf("请输入数组长度 n =");     scanf("%d",&n);     a= (int *)malloc(n*sizeof(int));         printf("输入数组:");     for( i=0;i<n;i++){         scanf("%d",&a[i]);     }     MergeSort(a,0,7);        //合并结果     for( i=0;i<8;i++){         printf("%5d",a[i]);     }     printf("\n");     return 0; }


归并排序

标签:归并排序

原文地址:http://blog.51cto.com/13645380/2108293

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!