MergeSort
işlevimde neyin yanlış olduğunu anlayamıyorum.Birleştirme Sıralama Algoritması?
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;
}
}
Programın çıktısı: 1, 3, 1, 4, 5, 7, 7, 7, 26, 26, besbelli yanlıştır Bu benim kodudur. Ancak sadece kodda neyin yanlış olduğunu görmüyorum, bana her şey güzel gözüküyor. Bazı C++ kodlarını MargeSort
'a yönettim ve hata ayıklamaya çalıştım ama hata bulamıyorum. Onu gören var mı?
// doğru (;; i < r i ++ i = p) için: için (i
// err: Eğer = cevapsız için
Hata ayıklayıcısını kullanmayı düşündünüz mü? –
Ayrıca, önce 5 sayı veya 3 sayı ile denemelisiniz. Bu verilerle çalışamazsa, 10 sayı için işe yaramaz. – PaulMcKenzie
* Bazı C++ kodları MergeSort * 'ı goole - [bu?] Buldunuz mu? (Http://stackoverflow.com/questions/24650626/how-to-implement-classic-sorting-algorithms-in-modern-c) – PaulMcKenzie