Не нужно переставлять все поля по одному
tempS = z[i].surname;
z[i].surname = z[i + 1].surname;
z[i + 1].surname = tempS;
tempG = z[i].gr;
z[i].gr = z[i + 1].gr;
z[i + 1].gr = tempG;
temp1 = z[i].ex1;
z[i].ex1 = z[i + 1].ex1;
z[i + 1].ex1 = temp1;
temp2 = z[i].ex2;
z[i].ex2 = z[i + 1].ex2;
z[i + 1].ex2 = temp2;
temp3 = z[i].ex3;
z[i].ex3 = z[i + 1].ex3;
z[i + 1].ex3 = temp3;
tempSr = z[i].sr;
z[i].sr = z[i + 1].sr;
z[i + 1].sr = tempSr;
Достаточно написать temp = z[i];
z[i] = z[i + 1];
z[i + 1] = temp;
В отличие от массива, структуры можно присваивать целиком, а не поэлементно.