关于归并排序的错误
按照《大话数据结构》写的,但结果少了几个数据
sort.h
//
// divide and conquer
//
#include <stdio.h>
#include <stdlib.h>
//#define N 10
#define N 9
void merge(int a[], // target
int b[], int bn, int c[], int cn)
{
int i, bi, ci;
for (i=0, bi=0, ci=0; bi<bn && ci<cn; )
{
if (b[bi] <= c[ci])
a[i++] = b[bi++];
else
a[i++] = c[ci++];
}
if (bi < bn)
{
while (bi < bn) a[i++] = b[bi++];
}
else if (ci < cn)
{
while (ci < cn) a[i++] = c[ci++];
}
}
void merge_sort(int a[], int n)
{
if (n > 1)
{
int b[N], c[N];
memcpy(b, a, n/2 * sizeof(int));
memcpy(c, a + n/2, (n/2 + n%2) * sizeof(int));
merge_sort(b, n/2);
merge_sort(c, n/2 + n%2);
merge(a, b, n/2, c, n/2 + n%2);
}
}
int main(void)
{
int a[N], i;
// random N int-numbers
srand((unsigned int)GetTickCount());
for (i = 0; i < N; i++) a[i] = rand();
printf("Before sorting: \n");
for (i = 0; i < N; i++) printf("%d ", a[i]);
merge_sort(a, N);
printf("After sorting: \n");
for (i = 0; i < N; i++) printf("%d ", a[i]);
getch();
return 0;
}