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 ); } }
void MergeSort( int* arr , int beginIdx , int lastIdx ) { if( arr == NULL ) { return; } int buffer[MAX_BUFFER_SIZE] = { 0 , }; MergeSortIter( arr , buffer , beginIdx , lastIdx ); }
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; }