View difference between Paste ID: FZCh2yWZ and
SHOW:
|
|
- or go back to the newest paste.
1 | - | |
1 | + | void deinterleave_split(int *a, int len) |
2 | { | |
3 | if (2 == len) | |
4 | { | |
5 | // not needed | |
6 | } | |
7 | else if (4 == len) | |
8 | { | |
9 | int t = a[1]; | |
10 | a[1] = a[2]; | |
11 | a[2] = t; | |
12 | } | |
13 | else if (0 == (len % 4)) | |
14 | { | |
15 | deinterleave_split(&a[0], len/2); | |
16 | deinterleave_split(&a[len/2], len/2); | |
17 | for (int i = len/4; i < len/2; i++) | |
18 | { | |
19 | int t = a[i]; | |
20 | a[i] = a[i+len/4]; | |
21 | a[i+len/4] = t; | |
22 | } | |
23 | } | |
24 | else | |
25 | { | |
26 | int t; | |
27 | deinterleave_split(&a[0], len-2); | |
28 | t = a[len-2]; | |
29 | memmove(&a[len/2],&a[len/2-1],sizeof(int)*(len/2-1)); | |
30 | a[len/2-1] = t; | |
31 | } | |
32 | } | |
33 | ||
34 | void interleave_split(int *a, int len) | |
35 | { | |
36 | if (2 == len) | |
37 | { | |
38 | // no need | |
39 | } | |
40 | else if (4 == len) | |
41 | { | |
42 | int t = a[1]; | |
43 | a[1] = a[2]; | |
44 | a[2] = t; | |
45 | } | |
46 | else if (0 == (len % 4)) | |
47 | { | |
48 | for (int i = len/4; i < len/2; i++) | |
49 | { | |
50 | int t = a[i]; | |
51 | a[i] = a[i+len/4]; | |
52 | a[i+len/4] = t; | |
53 | } | |
54 | interleave_split(&a[0], len/2); | |
55 | interleave_split(&a[len/2], len/2); | |
56 | } | |
57 | else | |
58 | { | |
59 | int t; | |
60 | t = a[len/2-1]; | |
61 | memmove(&a[len/2-1],&a[len/2],sizeof(int)*(len/2-1)); | |
62 | a[len-2] = t; | |
63 | interleave_split(&a[0], len-2); | |
64 | } | |
65 | } |