Un hotel primește rezervări din două surse — formular online și agenție — fiecare deja ordonată cronologic. Cum le unești într-un singur registru ordonat, FĂRĂ să resortezi de la zero? Interclasarea.
Codul interclasării e plin de c[k++] = .... Dacă expresia asta ți se pare o vrăjitorie, oprește-te aici — o descâlcim complet înainte de a merge mai departe.
v[k++] = x e IDENTIC cu:
v[++k] = x e IDENTIC cu:
La interclasare nu scrii o valoare fixă — copiezi dintr-o listă în alta: c[k++] = a[i++]. Sunt două post-incrementări pe o singură linie: „ia elementul w[y] și pune-l în v[x], apoi mută AMÂNDOI indicii".
v[x++] = w[y++] e IDENTIC cu:
w = sursa (fixă), v = destinația. Apasă o expresie și vezi CE se copiază și cum se mișcă x și y (post/pre, ++/--):
| expresia | echivalent (în ordine) | efect |
|---|---|---|
| v[x++] = w[y++] | v[x]=w[y]; x++; y++ | copiază, apoi AMBII avansează (cazul interclasării) |
| v[++x] = w[y++] | x++; v[x]=w[y]; y++ | întâi avansează x (sare peste v[x] curent) |
| v[x++] = w[++y] | y++; v[x]=w[y]; x++ | întâi avansează y (sare peste w[y] curent) |
| v[--x] = w[y++] | x--; v[x]=w[y]; y++ | dă x înapoi cu 1 (rescrie poziția anterioară) |
| v[x++] = w[--y] | y--; v[x]=w[y]; x++ | citește sursa de la coadă spre cap |
| w[y++] | folosește w[y], apoi y++ | doar citire + avans (fără scriere) |
Pornim cu k = 0 și scriem, pe rând, 10, 20, 30. Vezi cum diferă rezultatul:
cu v[k++] (corect pentru umplere de la 0)
| pas | k | efect |
|---|---|---|
| v[k++]=10 | 0→1 | v[0]=10 |
| v[k++]=20 | 1→2 | v[1]=20 |
| v[k++]=30 | 2→3 | v[2]=30 |
v = [10, 20, 30] ✔
cu v[++k] (sare peste v[0]!)
| pas | k | efect |
|---|---|---|
| v[++k]=10 | 0→1 | v[1]=10 |
| v[++k]=20 | 1→2 | v[2]=20 |
| v[++k]=30 | 2→3 | v[3]=30 |
v = [?, 10, 20, 30] — v[0] a rămas gol!
Compari elementele curente din A și B; cel mai mic coboară în rezultat, iar indicele lui avansează. Când o listă se termină, restul celeilalte se „toarnă" direct.
Interclasarea, condensată.