/*
归并排序
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define BASE 1024
void mergeSort(int*, int, int);
void merge(int*, int, int, int);
int main(void)
{
int n;
int i;
int *array = NULL;
srand((unsigned)time(NULL));
while (scanf("%d", &n))
{
array = (int*)malloc(sizeof(int) * n);
for (i = 0; i < n; ++i)
{
array[i] = rand() % BASE;
printf("%d ", array[i]);
}
printf("\n");
mergeSort(array, 0, n - 1);
for (i = 0; i < n; ++i)
{
printf("%d ", array[i]);
}
printf("\n");
}
getch();
return 0;
}
void mergeSort(int *array, int left, int right)
{
if (left < right)
{
int middle = (left + right) / 2;
mergeSort(array, left, middle);
mergeSort(array, middle + 1, right);
merge(array, left, middle, right);
}
}
void merge(int *array, int left, int middle, int right)
{
int *temp = (int*)malloc(sizeof(int) * (right - left + 1));
int i = 0;
int j = 0;
int lbegin = left;
int rbegin = middle + 1;
int lend = middle;
int rend = right;
while (lbegin <= lend && rbegin <= rend )
{
if (array[lbegin] <= array[rbegin])
{
temp[i] = array[lbegin];
++lbegin;
++i;
}
else
{
temp[i] = array[rbegin];
++rbegin;
++i;
}
}
if (lbegin <= lend)
{
while (lbegin <= lend)
{
temp[i] = array[lbegin];
++lbegin;
++i;
}
}
if (rbegin <= rend)
{
while (rbegin <= rend)
{
temp[i] = array[rbegin];
++rbegin;
++i;
}
}
for (j = left, i = 0; j <= right; ++j, ++i)
{
array[j] = temp[i];
}
}
归并排序
最新推荐文章于 2023-09-03 20:36:33 发布