您的位置:首页 > 其它

排序算法05:归并排序

2012-07-10 15:02 204 查看
归并排序(MergeSort)

#include "MergeSort.h"

void Merge(int A[], int Start, int Mid, int End)
{
int n1 = Mid - Start + 1;
int n2 = End - Mid;
int *Left = (int*)malloc(n1 * sizeof(int));
int *Right = (int*)malloc(n2 * sizeof(int));
int i, j, k;

for(i = 0; i < n1; i++)
Left[i] = A[Start + i];
for(j = 0; j < n2; j++)
Right[j] = A[Mid + 1 + j];

i = j = 0;
k = Start;
while(i < n1 && j < n2)
{
if(Left[i] < Right[j])
A[k++] = Left[i++];
else
A[k++] = Right[j++];
}
while(i < n1)
A[k++] = Left[i++];
while(j < n2)
A[k++] = Right[j++];
}

void MergeSort(int A[], int N, int Start, int End)
{
int Mid;
if(Start < End)
{
Mid = (Start + End) / 2;
/*
printf("sort  (%d-%d, %d-%d) ", Start, Mid, Mid + 1, End);
for(int c = 0; c < N; c++)
{
printf("%d ", A[c]);
}
printf("\n");
*/
MergeSort(A, N, Start, Mid);
MergeSort(A, N, Mid + 1, End);
Merge(A, Start, Mid, End);
/*
printf("merge (%d-%d, %d-%d) ", Start, Mid, Mid + 1, End);
for(int c = 0; c < N; c++)
{
printf("%d ", A[c]);
}
printf("\n");
*/
}
}


耗时 Time = 27ms。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: