0
여기 merge_sort의 예가 cprogramming입니다. 빠른 정렬 컨텍스트에서 알고리즘을 이해하기 위해 알고리즘을 분해하기 위해 애 쓰고 있습니다. SO post.merge_sort에 대한 코드 통합 -
편집 :
I가 업데이트되었습니다/코드를 고정하고 아래 답변으로 기록했다. 이것은 작동하는 merge_sort입니다.
여기 merge_sort의 예가 cprogramming입니다. 빠른 정렬 컨텍스트에서 알고리즘을 이해하기 위해 알고리즘을 분해하기 위해 애 쓰고 있습니다. SO post.merge_sort에 대한 코드 통합 -
편집 :
I가 업데이트되었습니다/코드를 고정하고 아래 답변으로 기록했다. 이것은 작동하는 merge_sort입니다.
여기에 게시 된 코드는 가독성을 향상시킬 수 있습니다 ... 여기 있습니다. 작동중인 병합 확인 됨 :
#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;
}