合并K排序数组上的排序

时间:2019-06-14 12:31:48

标签: sorting merge

我想对几乎排序的数组(K排序的数组)进行排序

我尝试对合并排序进行一些更改,以尝试对几乎排序的数组进行“分而治之”的方法,但我不明白为什么我的代码崩溃(k = 1)真的很奇怪,我检查是否调用错误的位置或除以0,但调试器未发现任何问题……

void internal_msort(int a[], int n, int helper_array[],int k)
{
    int left = n / (k),right = n - left; // this is the line where its crash
    if (n < k)
        return;
    internal_msort(a, left, helper_array,k);
    internal_msort(a + left, right, helper_array,k);
    merge(a, left, a + left, right, helper_array);
    memcpy(a, helper_array, n * sizeof(int));
}

void merge_sort(int a[], int n,int k)
{
    int *tmp_array = malloc(sizeof(int) * n);
    internal_msort(a, n, tmp_array,k);
    free(tmp_array);
}

它对于k!= 1正常工作

例如我有:

Please enter a non negative integer (k):1
Please enter a non negative integer (n):10
Please enter n integer values with the special characteristic:
0 1 2 3 4 5 6 7 8 9

Process finished with exit code 11

0 个答案:

没有答案