2011-10-24 4 views
0

여기 merge_sort의 예가 cprogramming입니다. 빠른 정렬 컨텍스트에서 알고리즘을 이해하기 위해 알고리즘을 분해하기 위해 애 쓰고 있습니다. SO post.merge_sort에 대한 코드 통합 -

편집 :

I가 업데이트되었습니다/코드를 고정하고 아래 답변으로 기록했다. 이것은 작동하는 merge_sort입니다.

답변

0

여기에 게시 된 코드는 가독성을 향상시킬 수 있습니다 ... 여기 있습니다. 작동중인 병합 확인 됨 :

#include "c_arclib.cpp" 
void merge_helper(int *input, int left, int right, int *scratch) 
    { 
    if(right == left + 1) 
    { 
    return; 
    } 
    else 
    { 
    int i = 0; 
    int length = right - left; 
    int midpoint_distance = length/2; 
    int l = left, r = left + midpoint_distance; 
    merge_helper(input, left, left + midpoint_distance, scratch); 
    merge_helper(input, left + midpoint_distance, right, scratch); 
    for(i = 0; i < length; i++) 
     { 
     if((l < (left + midpoint_distance)) && (r == right || input[l] > input[r])) 
     { 
     scratch[i] = input[l]; 
     l++; 
     } 
     else 
     { 
     scratch[i] = input[r]; 
     r++; 
     } 
     } 
    for(i = left; i < right; i++) 
     { 
     input[i] = scratch[i - left]; 
     } 
    } 
    } 
int merge_sort(int *input, int size) 
    { 
    int *scratch = (int *)malloc(size * sizeof(int)); 
    if(scratch != NULL) 
    { 
     merge_helper(input, 0, size, scratch); 
     free(scratch); 
     return 1; 
    } 
    else 
    { 
     return 0; 
    } 
    } 

int main() 
    { 
    int size=1000; 
    int* array = new int[size](); 
    util::rand_to_array(array,size); 
    util::print_array(array, size); 
    merge_sort(array, size); 
    cout << endl; util::print_array(array, size); 
    return 0; 
    }