归并排序算法C实现
#include < stdio.h > #include < stdlib.h > int numarray[ 16 ] = ... {12,9,1,87,28,10,4,99,299,2,99,12,112,76,9,33} ; void Merge( int A[], int l, int q, int r) ... { int i,k,j; int n1 = q-l+1; int n2 = r-q; int *LA = (int *)malloc(n1*sizeof(int)); int *RA = (int *)malloc(n2*sizeof(int)); for(i=0;i<n1;i++) LA[i] = A[l+i]; for(i=0;i<n2;i++) RA[i] = A[l+i+n1]; i=0,j=0; for(k=0;k<r+1;k++) ...{ if(i==(n1) && j==(n2)) break; if(i==(n1) && j<(n2)) ...{ A[l+k] = RA[j]; j++; continue; } if(i<(n1) && j==(n2)) ...{ A[k+l] = LA[i]; i++; continue; } if(LA[i]<=RA[j]) ...{ A[k+l]=LA[i]; i++; continue; } else ...{ A[k+l]=RA[j]; j++; continue; } } free(LA); free(RA);} void MergeSort( int A[], int Left, int Right) ... { if(Left<Right) ...{ int i = (Left+Right)/2; MergeSort(A,Left,i); MergeSort(A,i+1,Right); Merge(A,Left,i,Right); }} void main() ... { int m; MergeSort(numarray,0,15); for(m=0;m<16;m++) ...{ printf("%d ",numarray[m]); } system("pause");}