我想对几乎排序的数组(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