4-1 Iterative Mergesort(9点)

2039 ワード

How would you implement mergesort without using recursion?
The idea of iterative mergesort is to start from N sorted sublists of length 1, and each time to merge a pair of adjacent sublists until one sorted list is obtained. You are supposed to implement the key function of merging.
Format of functions:
void merge_pass( ElementType list[], ElementType sorted[], int N, int length );

The function merge_pass performs one pass of the merge sort that merges adjacent pairs of sublists from list into sorted . N is the number of elements in the list and length is the length of the sublists.
Sample program of judge:
#include 

#define ElementType int
#define MAXN 100

void merge_pass( ElementType list[], ElementType sorted[], int N, int length );

void output( ElementType list[], int N )
{
    int i;
    for (i=0; i

Sample Input:
10
8 7 9 2 3 5 1 6 4 0

Sample Output:
7 8 2 9 3 5 1 6 0 4 
2 7 8 9 1 3 5 6 0 4 
1 2 3 5 6 7 8 9 0 4 
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9
void merge_pass( ElementType list[], ElementType sorted[], int N, int length )
{
	int now=0;
	int top=0;
	int left, right;
	while(now
PTA , ,