Я пытаюсь реализовать алгоритм сортировки слияния, и я получаю ошибку сегментации. Зачем? Ошибка, похоже, в функции MergeSort. Функция сортировки слияния (при втором вызове), когда должна проверять только массив из 4 чисел (длина должна быть 4), показывает длину = 27. Почему? (Проверено на массив из 8 элементов)Ошибка сегментации: 11 MergeSort
#include<iostream>
using namespace std;
int n, A[1000];
void citire(int lungime) {
for (int i = 0; i < lungime; i++) cin >> A[i];
}
void afisare(int lungime) {
for (int i = 0; i < lungime; i++)
cout << A[i] << " ";
cout << '\n';
}
int lungime(int A[]) {
int i = 0;
while (A[i]) i++;
return i;
}
void Merge(int L[], int R[], int A[]) {
int nL = lungime(L);
int nR = lungime(R);
int i = 0, j = 0, k = 0;
while (i < nL && j < nR) {
if (L[i] <= R[j]) {
A[k] = L[i];
i++;
}
else {
A[k] = R[j];
j++;
}
k++;
}
while (i < nL) {
A[k] = L[i];
i++;
k++;
}
while (j < nR) {
A[k] = R[j];
j++;
k++;
}
}
void MergeSort(int A[]) {
int n1 = lungime(A);
if (n1 < 2) return;
else
{
int mid = (int)n1/2;
int L[mid];
int R[n - mid];
for (int i = 0; i < mid; i++)
L[i] = A[i];
for (int i = mid; i < n; i++)
R[i - mid] = A[i];
MergeSort(L);
MergeSort(R);
Merge(L, R, A);
}
}
int main() {
cin >> n;
citire(n);
MergeSort(A);
afisare(n);
return 0;
}
Похоже, вам, возможно, потребуется научиться использовать отладчик для выполнения кода. С хорошим отладчиком вы можете выполнить свою программу по очереди и посмотреть, где она отклоняется от ожидаемого. Это важный инструмент, если вы собираетесь заниматься программированием. Дальнейшее чтение: ** [Как отлаживать небольшие программы] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver
Я знаю это, но я изменился на OSx среда разработки и мой отладчик не работает, я не знаю почему. Я его установлю, но, может быть, я найду ответ здесь, прежде чем закончу настройку отладчика –
«поскольку я новичок в компиляторе OSx C++ и не могу отлаживать код» звучит как прекрасная возможность учиться! – RyanP