z[n].l1
itd..
Tablica o wielkości n ma n -1 komórek (edit: lol, tfu, sorry, oczywiście miałem na myśli, że ostatnia komórka ma "nr" n - 1). Poza tym coś mi się wydaje, że tam powinno być i.
Pętle for:
for (int i = 0; i<n-1; i++)
Nie dochodzisz do ostatniej komórki w przypadku wszystkich pętli w twoim kodzie. Tak będzie dobrze:
for (int i = 0; i < n; i++)
PS:
a = w1[z[n].l1];
w1[z[n].l1] = w2[z[n].l2];
w2[z[n].l2] = a;
Od tego jest std::swap.