C中的泛型合并排序

时间:2015-12-06 12:14:24

标签: c generics mergesort

我可能错过了一些愚蠢的东西。 我试图在C中编写泛型合并排序 程序不断崩溃。任何想法?

void merge(void* arr[],int length,int middle)
{
int left_arr_i,right_arr_i=length-middle,help_arr_i;
void** help_arr=malloc(sizeof(void*)*length);
for(left_arr_i=help_arr_i=0;(left_arr_i<middle)&&(right_arr_i<length);
        help_arr_i++)
{
    if(arr[left_arr_i]<arr[right_arr_i])
    {
        help_arr[help_arr_i]=arr[left_arr_i];
        left_arr_i++;
    }
    else{
        help_arr[help_arr_i]=arr[right_arr_i];
        right_arr_i++;
      }
  }
  for(;left_arr_i<middle;help_arr_i++) { help_arr[help_arr_i]=arr[left_arr_i];}
  for(;right_arr_i<length;help_arr_i++)     {help_arr[help_arr_i]=arr[right_arr_i];}
  for(int i=0;i<length;i++) { arr[i]=help_arr[i];
  free(help_arr);
  }
  }

void merge_sort (void**a, int n) {
if (n < 2)
    return;
int m = n / 2;
merge_sort(a, m);
merge_sort(a + m, n - m);
merge(a, n, m);
}

非常感谢(:

1 个答案:

答案 0 :(得分:1)

在这部分

for(;left_arr_i<middle;help_arr_i++) { help_arr[help_arr_i]=arr[left_arr_i];}
for(;right_arr_i<length;help_arr_i++)     {help_arr[help_arr_i]=arr[right_arr_i];}

在分配中使用两个索引值,但只增加其中一个。这会将多个help_arr元素设置为相同的值。