Я не могу понять, что не так с моей функцией MergeSort
. Это мой код:Алгоритм сортировки слияния?
void Merge(int* A, int p, int q, int r)
{
int B[100], i = 0, j = 0, k = 0;
i = p;
k = p;
j = q + 1;
while (i <= q && j <= r)
{
if (A[i] <= A[j])
{
B[k] = A[i];
k++;
i++;
}
else
{
B[k] = A[j];
k++;
j++;
}
}
while (i <= q)
{
B[k] = A[i];
k++;
i++;
}
while (j <= r)
{
B[k] = A[j];
k++;
j++;
}
for (i = p; i < r; i++)
{
A[i] = B[i];
}
}
void MergeSort(int A[], int p, int r)
{
int q;
if (p < r)
{
q = (p + r)/2;
MergeSort(A, p, q);
MergeSort(A, q + 1, r);
Merge(A, p, q, r);
}
}
int main(void)
{
int N[10];
N[0] = 4;
N[1] = 5;
N[2] = 8;
N[3] = 12;
N[4] = 7;
N[5] = 3;
N[6] = 23;
N[7] = 1;
N[8] = 90;
N[9] = 26;
MergeSort(N, 0, 9);
for (int i = 0; i < 10; i++)
{
cout << N[i] << endl;
}
}
Выход программы: 1, 3, 1, 4, 5, 7, 7, 7, 26, 26, что, очевидно, не так. Однако я просто не вижу, что не так в коде, для меня все выглядит хорошо. Я googled некоторые C++ коды MargeSort
и попытаться отладить его, но я не могу найти ошибку. Кто-нибудь это видит?
Считаете ли вы использование отладчика? –
Также вы должны сначала попробовать с 5 номерами или даже тремя номерами. Если он не может работать с этими данными, он не сможет работать на 10 номеров. – PaulMcKenzie
* Я goole некоторые C++ коды MergeSort * - Вы нашли [это?] (Http://stackoverflow.com/questions/24650626/how-to-implement-classic-sorting-algorithms-in-modern-c) – PaulMcKenzie