归并排序算法实现:
#include#include #define FatalError( Str ) fprintf( stderr, "%s\n", Str ), exit( 1 )typedef int ElementType;void Merge(ElementType A[],ElementType TmpArray[],int lpos,int rpos,int rightend){ int i,leftend,NumElements,TmpPos; leftend=rpos-1; TmpPos=lpos; NumElements=rightend-lpos+1; while(lpos<=leftend&&rpos<=rightend) { if(A[lpos]<=A[rpos]) TmpArray[TmpPos++]=A[lpos++]; else TmpArray[TmpPos++]=A[rpos++]; } while(lpos<=leftend) TmpArray[TmpPos++]=A[lpos++]; while(rpos<=rightend) TmpArray[TmpPos++]=A[rpos++]; //由于每次将临时数组中的元素复制回原来数组时,不能从第一个开始复制,只是从刚刚合并的那一部分复制,所以记录要合并的长度 for(i=0;i
运行结果如下: