#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 20
void show(int *p, int length)
{
for (int i = 0; i < N; i++)
{
printf("%3d", p[i]);
}
printf("\n");
}
void merge(int *p, int first, int mid, int last)
{
int *ptemp = calloc(last - first + 1, sizeof(int));
int left_first = first;
int left_last = mid;
int right_first = mid + 1;
int right_last = last;
int k = 0;
for (; left_first <= left_last && right_first <= right_last; k++)
{
if (p[left_first] < p[right_first])
{
ptemp[k] = p[left_first++];
}
else
{
ptemp[k] = p[right_first++];
}
}
if (left_first <= left_last)//如果第一个有剩余
{
while (left_first <= left_last)
{
ptemp[k] = p[left_first++];
k++;
}
}
if (right_first <= right_last)//如果第二个有剩余
{
while (right_first <= right_last)
{
ptemp[k] = p[right_first++];
k++;
}
}
for (int i = 0; i < last - first + 1; i++)
{
p[first + i] = ptemp[i];
}
free(ptemp);
}
void merge_sort(int *p,int first,int last)
{
int mid = 0;
if (first < last)
{
mid = (first + last) / 2;
merge_sort(p, first,mid);
merge_sort(p, mid + 1, last);
merge(p, first, mid, last);
}
}
int main()
{
time_t st;
unsigned int data = time(&st);
srand(data);
int a[N];
for (int i = 0; i < N; i++)
{
a[i] = rand() % 100;
}
show(a, N);
merge_sort(a, 0, N - 1);
show(a, N);
return 0;
}
归并排序
最新推荐文章于 2023-12-11 10:45:47 发布