Он должен сортироваться с объединением. Существуют две функции слияния и слияние сортировки. Некоторые неизвестные функции (чтение массива из файла и массива) полностью функциональны во входном файле.У меня ошибка сегментации, но я не нашел oO?
Valgrind покажите мне, что сбой происходит при распределении из массива2 и когда он читает и записывает на третьем этапе while-loop в void merge.
void merge(int* array, int start, int middle, int end) {
int size = end - start + 1;
int *array2 = malloc(size*sizeof(array2));
int k = start;
int m = middle + 1;
int i = 0;
int j = 0;
while (k <= middle && m <= end) {
if (array[k] <= array[m]) {
array2[i] = array[k];
k++;
}
else {
array2[i] = array[m];
m++;
}
i++;
}
while (k <= middle) {
array2[i] = array[k];
k++;
i++;
}
while (m <= end) {
array2[i] = array[k];
k++;
i++;
}
while (j < i) {
array[ start + j -1 ] = array2[j];
j++;
}
free(array2);
}
void merge_sort(int* array, int first, int last) {
int middle;
if (first < last) {
middle = ((first+last)/2);
merge_sort (array, first, middle);
merge_sort (array, middle + 1, last);
merge (array, first, middle, last);
}
}
int main (int argc, char *argv[])
{
if (argc!=3) {
printf ("usage: %s <maximale anzahl> <dateipfad>\n", argv[0]);
exit(2);
}
char *filename = argv[2];
int *array;
int size = atoi(argv[1]);
array = malloc(size*sizeof(array));
int len = read_array_from_file(array, atoi(argv[1]), filename);
printf("Eingabe:\n");
print_array(array, len);
merge_sort(array, array[0], len);
printf("Sortiert:\n");
print_array(array, len);
free(array);
return 0;
}
Пожалуйста, отлаживайте свой код шаг за шагом и возвращайтесь с более точным описанием проблемы. –
1) 'array [start + j -1] = array2 [j]' -> 'array [start + j] = array2 [j]' – BLUEPIXY
2) 'merge_sort (array, array [0], len); '->' merge_sort (array, 0, len-1); ' – BLUEPIXY