归并排序(Merge Sort)

来源:互联网 发布:最有效的淘宝推广方式 编辑:程序博客网 时间:2024/06/05 18:08
#include<stdio.h>#include<malloc.h>void Merge(int a[],int p,int q,int r){int n1=q-p+1;int n2=r-q;int *L=(int *)malloc(sizeof(int)*(n1)); //分配内存空间给未知大小的数组int *R=(int *)malloc(sizeof(int)*(n2));for(int i=0;i<n1;i++)       //i必须从0开始技术,而不是从p开始L[i]=a[p+i];//此处(p+i)而非i,因为p可能不为0for(i=0;i<n2;i++)R[i]=a[q+1+i];i=0;int j=0;int k=p;while(i<n1&&j<n2&&k<=r){if(L[i]<=R[j])a[k++]=L[i++];elsea[k++]=R[j++];}while(k<=r){if(i<n1&&j>=n2)a[k++]=L[i++];if(i>=n1&&j<n2)a[k++]=R[j++];}}void MergeSort(int a[],int p,int r){if(p<r) //如果没有这个限制,r一直会变小,进入死循环{int q=(p+r)/2;MergeSort(a,p,q);MergeSort(a,q+1,r);Merge(a,p,q,r);}}void main(){int a[10]={2,5,8,7,6,9,0,3,1,4};MergeSort(a,0,9);for(int i=0;i<10;i++){printf("%d ",a[i]);}printf("\n");}

0 0