#include <stdio.h>
#include <malloc.h>
void Sort(int List[], int low, int mid, int high);
void MergePass(int List[], int length, int L_length);
void MergeSort (int List[], int L_length);
int main ()
{
int i, List[10000], L_length;
scanf ("%d", &L_length);
for (i = 0; i < L_length; i++) scanf ("%d", &List[i]);
MergeSort(List, L_length);
for (i = 0; i < L_length; i++) printf ("%d\n", List[i]);
return 0;
}
void Sort(int List[], int low, int mid, int high)
{
int *temp, i = low, j = mid + 1, k = 0;
temp = (int *) malloc ((high - low + 1) * sizeof (int));
while (i <= mid && j <= high)
{
if (List[i] <= List[j])
{
temp[k] = List[i];
i++;
k++;
}
else
{
temp[k] = List[j];
k++;
j++;
}
}
while (i <= mid)
{
temp[k] = List[i];
i++;
k++;
}
while (j <= high)
{
temp[k] = List[j];
j++;
k++;
}
for (k = 0, i = low; i <= high; i++, k++)
{
List[i] = temp[k];
}
free (temp);;
}
void MergePass(int List[], int length, int L_length)
{
int i;
for (i = 0; i + 2 * length < L_length; i = i + 2 * length)
{
Sort (List, i, i + length - 1, i + 2 * length - 1);
}
if (i + length - 1 < L_length)
{
Sort (List, i, i + length - 1, L_length - 1);
}
}
void MergeSort (int List[], int L_length)
{
int length;
for (length = 1; length < L_length; length = length * 2)
{
MergePass (List, length, L_length);
}
}
[NOJ][算法实验一]1002.归并排序
最新推荐文章于 2022-11-16 17:03:21 发布