# include & ltstdio.h & gt
void Merge(int sourceArr[],int tempArr[],int startIndex,int midIndex,int endIndex)
{
int i = startIndex,j=midIndex+1,k = startIndex
而(我!= midIndex+1 & amp;& ampj!=endIndex+1)
{
if(source arr[I]& gt;= sourceArr[j])
tempArr[k++]= source arr[j++];
其他
tempArr[k++]= source arr[i++];
}
而(我!= midIndex+1)
tempArr[k++]= source arr[i++];
而(j!= endIndex+1)
tempArr[k++]= source arr[j++];
for(I = startIndex;我& lt= endIndexi++)
source arr[I]= tempArr[I];
}
//內部使用遞歸
void MergeSort(int sourceArr[],int tempArr[],int startIndex,int endIndex)
{
int midIndex
if(startIndex & lt;endIndex)
{
midIndex =(startIndex+endIndex)/2;
MergeSort(sourceArr,tempArr,startIndex,midIndex);
MergeSort(sourceArr,tempArr,midIndex+1,end index);
Merge(sourceArr,tempArr,startIndex,midIndex,endIndex);
}
}
int main(int argc,char * argv[])
{
int a[8] = {50,10,20,30,70,40,80,60 };
int i,b[8];
MergeSort(a,b,0,7);
for(I = 0;我& lt8;i++)
printf("%d ",a[I]);
printf(" \ n ");
返回0;
}