13.05.2012, 11:01. Просмотров 1887. Ответов 1
Привет всем. Возникла такая проблема: пытаюсь реализовать сортировку простым двухпутевым слиянием по алгоритму из книжки Кнута.
Даже сместил индексы(чтобы не с 0 начинаться, как в С) и, за что стыдно, расставил метки, но она все равно не работает на некоторых длинах массивов.
Вот реализация:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
| int s,p,i,j,k,l,d,q,r;
s=0; p=1;
Label2:
if(s==0){i=1;j=n;k=n;l=2*n+1;}
if(s==1){i=n+1;j=2*n;k=0;l=n+1;}
d=1; q=p; r=p;
Label3:
if(a[i]>a[j])
goto Label8;
k+=d;
a[k]=a[i];
i++; q--;
if(q>0)
goto Label3;
Label6:
k+=d;
if(k==l)
goto Label13;
a[k]=a[j];
j--; r--;
if(r>0)
goto Label6;
else
goto Label12;
Label8:
k+=d;
a[k]=a[j];
j--; r--;
if(r>0)
goto Label3;
Label10:
k+=d;
if(k==l)
goto Label13;
a[k]=a[i];
i++; q--;
if(q>0)
goto Label10;
Label12:
q=p; q=r; d=-d;
swap(k,l);
if(j-i<p)
goto Label10;
else
goto Label3;
Label13:
p+=p;
if(p<n)
{
s=1-s;
goto Label2;
}
if(s==0)
{
for(int t=1;t<=n;t++)
a[t]=a[t+n];
} |
|
Подскажите, пожалуйста, в чем здесь может быть проблема.