归并排序
注意和快排的区别啊!!!
#include<stdlib.h>
#include<stdio.h>
void Merge(int sourceArr[],int tempArr[],int startIndex,int midIndex,int endIndex)
{
int i,j,k;
for(i=midIndex+1,j=startIndex;startIndex<=midIndex&&i<=endIndex;j++)
if(sourceArr[startIndex]<=sourceArr[i])
tempArr[j]=sourceArr[startIndex++];
else
tempArr[j]=sourceArr[i++];
if(startIndex<=midIndex)
for(k=0;k<=midIndex-startIndex;k++)
tempArr[j+k]=sourceArr[startIndex+k];
if(i<=endIndex)
for(k=0;k<=endIndex-i;k++)
tempArr[j+k]=sourceArr[i+k];
for(i=startIndex;i<=endIndex;i++)
sourceArr[i]=tempArr[i];
}
//内部使用递归
void MergeSort(int sourceArr[],int tempArr[],int startIndex,int endIndex)
{
int midIndex;
if(startIndex<endIndex)
{
midIndex=(startIndex+endIndex)/2;
MergeSort(sourceArr,tempArr,startIndex,midIndex);
MergeSort(sourceArr,tempArr,midIndex+1,endIndex);
Merge(sourceArr,tempArr,startIndex,midIndex,endIndex);
}
}
//调用
int main(/*int argc,char * argv[]*/)
{
int a[8]={50,10,20,30,70,40,80,60};
int b[8],i;
MergeSort(a,b,0,7);
for(i=0;i<8;i++)
printf("%d ",a[i]);
printf("\n");
//system("pause");
return 0;
}