归并排序
归并排序的基本思想: 基于合并 将两个或两个以上的有序表合并成一个新的有序表
代码如下
#include <stdio.h>
void Merge(int sourceArr[],int tempArr[],int startIndex,int midIndex,int endIndex){
/*将sourceArr[]借助tempArr数组把从startIndex到midIndex和从midIndex到endIndex两个有序序列合并成一个有序序列并存放在sourceArr数组中*/
int i=startIndex,j=midIndex+1,k=startIndex;
while(i<=midIndex && j<=endIndex)
{
if(sourceArr[i]<sourceArr[j])
tempArr[k++]=sourceArr[i++];
else
tempArr[k++]=sourceArr[j++];
}
while(i!=midIndex+1)
tempArr[k++]=sourceArr[i++];
while(j!=endIndex+1)
tempArr[k++]=sourceArr[j++]
for(i=startIndex;i<=endIndex;i++)
sourceArr[i]=tempArr[i];
}
/*递归实现归并*/
void MergeSort(int sourceArr[],int tempArr[],int startIndex,int endIndex){
/*对sourceArr数组中从startIndex到endIndex的数借助数组tempArr进行归并排序*/
int midIndex;
if(startIndex<endIndex){
midIndex=(startIndex+endIndex)/2;
MergeSort(sourceArr, tempArr, startIndex, midIndex);
MergeSort(midIndex+1, tempArr, midIndex+1, endIndex);
Merge(sourceArr, tempArr, startIndex, midIndex, endIndex);
}
}
int main(int argc, const 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;i<8;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
1304

被折叠的 条评论
为什么被折叠?



