C/C++の宿題を片付けます 89代目
■ このスレッドは過去ログ倉庫に格納されています
0367デフォルトの名無しさん
2007/06/09(土) 20:40:31# include <stdlib.h>
# include <string.h>
void merge(int *a, int *b, int *out, int size)
{
int *orig_out = out;
int i = 0, j = 0;
while(i < size || j < size)
if(j >= size || i < size && a[i] < b[j])
*out++ = a[i++];
else
*out++ = b[j++];
}
void mergesort(int *a, int k)
{
int i;
int *temp = malloc((1 << k) * sizeof(int));
if(!temp) perror("malloc"), exit(1);
for(i = 0; i < k; i++)
{
int n = 1 << i;
int j;
for(j = 0; j < 1 << k - i - 1; j++)
{
int *x = a + 2 * j * n;
merge(x, x + n, temp, n);
memcpy(x, temp, n * 2 * sizeof(int));
}
}
free(temp);
}
■ このスレッドは過去ログ倉庫に格納されています