예제 #1
0
void MergeSortIter( int* arr , int* buffer , int beginIdx , int lastIdx )
{
	if( beginIdx < lastIdx )
	{
		int centerIdx = beginIdx + ( lastIdx - beginIdx ) / 2;
		MergeSortIter( arr , buffer , beginIdx , centerIdx );
		MergeSortIter( arr , buffer , centerIdx + 1 , lastIdx );
		Merge( arr , buffer , beginIdx , centerIdx + 1 , lastIdx );
	}
}
예제 #2
0
void MergeSort( int* arr , int beginIdx , int lastIdx )
{
	if( arr == NULL )
	{
		return;
	}
	int buffer[MAX_BUFFER_SIZE] = { 0 , };
	MergeSortIter( arr , buffer , beginIdx , lastIdx );
}
예제 #3
0
int main()
{
    int mergeRico[8] = {5,3,7,2,1,6,4,8};
    int mergeIter[8] = {5,3,7,2,1,6,4,8};
    int temp[8];
    int n = 8;
    int i;


    printf("Originale\n");
    for(i = 0; i < n; i++)
        printf("%d ", mergeRico[i]);

    printf("\nRicorsivo\n");
    MergeSortRico(0, n, mergeRico, temp);
    for(i = 0; i < n; i++)
        printf("%d ", mergeRico[i]);

    printf("\nIterativo\n");
    MergeSortIter(n, mergeIter, temp);
    for(i = 0; i < n; i++)
        printf("%d ", mergeIter[i]);
    return 0;
}