Я пытался написать алгоритм mergeSort в C, используя указатели (я новичок в указателях). Я использовал static int n
(n = количество элементов) и v
(массив элементов). После алгоритма mergeSort значение n
каждый раз изменяется со случайным числом. Что я сделал не так?
Здесь я читаю ввод
int *v = malloc(NMAX * sizeof(int));
int n;
scanf("%d", &n);
int i;
for (i = 0; i < n; ++i) {
scanf("%d", &v[i]);
}
Вот алгоритм сортировки слиянием:
void mergeSort(int st, int dr, int *v) {
if (st < dr) {
int mij = (st + dr) / 2;
mergeSort(st, mij, &v);
mergeSort(mij + 1, dr, &v);
mergeElements(st, dr, &v);
}
}
void mergeElements(int st, int dr, int *v) {
int *auxArray = malloc((dr - st + 3) * sizeof(int));
int pos = 0;
int sPos = st;
int mij = (st + dr) / 2;
int dPos = mij + 1;
for (pos = 0; pos < (dr - st + 1); ++pos) {
if (dPos == dr + 1) {
auxArray[pos] = v[sPos];
sPos++;
} else if (sPos == mij + 1) {
auxArray[pos] = v[dPos];
dPos++;
} else {
if (v[sPos] < v[dPos]) {
auxArray[pos] = v[sPos];
sPos++;
} else {
auxArray[pos] = v[dPos];
dPos++;
}
}
}
int i;
for (i = 0; i < pos; ++i) {
v[st + i] = auxArray[i];
}
free(auxArray);
}
А вот где я получаю ошибку (в main
):
mergeSort(0, n - 1, &v);
printf("%d", n);
Я получаю n
, чтобы быть 1998609340
вместо 6
.
Редактировать: Здесь я печатаю элементы:
for (i = 0; i < n; ++i) {
printf("%d ", v[i]);
}